繁体   English   中英

在bash脚本中解释awk命令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM