【问题标题】:How to use AWK Using with IF Condition如何在 IF 条件下使用 AWK
【发布时间】:2014-09-22 15:42:09
【问题描述】:
我需要使用 AWK 命令来查找文件中分隔符的数量,如果数量超过预期,那么我需要捕获记录。
使用的代码:
awk 'BEGIN { FS= "^A"; if ( 31 < NF-1) print $0 }' file.dat
但它不起作用。
【问题讨论】:
标签:
unix
if-statement
awk
delimiter
fs
【解决方案1】:
作为 fedorqui cmets,您在 BEGIN 块中没有任何数据。您必须至少阅读 1 条记录以确定您有多少字段:
awk -F"^A" 'NR==1 && NF >= 32 {exit} {print}' file.dat
【解决方案2】:
略短的版本:
awk -F"^A" 'NF > 32' file.dat
您最初的构造是31 < NF-1,这只是NF>32 的一种更复杂的说法。
【解决方案3】:
假设"^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),你不能
使用反斜杠。