如何在IF条件下使用AWK

时间:2014-09-22 15:42:09

标签: unix if-statement awk delimiter fs

我需要使用AWK命令查找文件中的分隔符计数,如果计数超过预期,那么我需要记录这些记录。

使用的代码:

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

但它不起作用。

3 个答案:

答案 0 :(得分:1)

作为fedorqui评论,您在BEGIN块中没有任何数据。您必须阅读至少1条记录才能确定您拥有的字段数:

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

答案 1 :(得分:0)

假设"^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),你绝对不能 使用反斜杠。

答案 2 :(得分:0)

略短的版本:

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

您的原始构造是31 < NF-1,这只是说NF>32的一种更复杂的方式。