繁体   English   中英

如何在IF条件下使用AWK

[英]How to use AWK Using with IF Condition

我需要使用AWK命令在文件中查找分隔符的数量,如果该数量超过预期,则需要捕获记录。

使用的代码:

awk 'BEGIN { FS= "^A"; if ( 31 < NF-1) print $0 }'  file.dat

但它不起作用。

作为fedorqui的注释,BEGIN块中没有任何数据。 您必须至少读取1条记录才能确定您拥有多少个字段:

awk -F"^A" 'NR==1 && NF >= 32 {exit} {print}'  file.dat

假设"^A"是两个字符的字符串

awk 'BEGIN { FS= "\\^A"} NF-1 > 32'  file.dat

会这样做,因为{print}是匹配的默认操作,并且两个最常见的awk实例(gawk和mawk)都将"\\\\^A"转换为文字插入符,后跟字母A

另一方面,如果"^A"表示Control-A ,则在shell提示符下键入该行时必须正确引用控制字符(例如,在bash + readline中为Control-V Control-A ),并且不得使用反斜杠。

稍短的版本:

awk _F"^A" 'NF > 32'  file.dat

您最初的构造是31 < NF-1 ,这只是NF>32的更复杂的表达方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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