[英]interpret an awk command in bash script
我试图在脚本中解释awk命令。 该命令包含一个变量,其中包含文件中的正常字段数,我想摆脱与此数量的字段不匹配的行。
这是我的代码:
filename='myfile.txt'
nbfields=$(head -1 $filename | awk -F '|' '{print NF}')
awkcommand="awk -F '|' 'NF=="$nbfields"{print \$0}'"
$awkcommand > 'myotherfile.txt'
执行时,我收到错误:
awk: cmd. line:1: 'NF==3{print
awk: cmd. line:1: ^ invalid char ''' in expression
在$0
之前,我尝试过和没有\\
,但它是一样的。
我可以使用eval使其工作,但我想尽可能避免使用eval。 据我了解,使用它是危险的。 有什么办法可以避免吗?
你不需要head
,你可以这样做:
nbfields=$(awk -F '|' '{print NF;exit}' file)
最好使用函数来存储awk命令:
awkcommand() { awk -F '|' -v n=$nbfields 'NF==n' file; }
还要注意使用-v
选项将shell变量传递给awk的正确方法。
根据我的理解,您希望根据第一行计算字段数,然后打印文件中具有相同字段数的所有行。 正确?
你可以这样做 -
awk -F'|' 'BEGIN{i=0}{if(i==0){fields=NF;i=1} if (fields==NF) print $0;}'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.