1

如果总行数大于某个数字,我想打印一个文件。例如:

 cat FILE
 A
 B
 C

 awk '{c+=1} END {print c}' FILE
 3

我想过滤c. 如果c><以此类推。

例如:

awk '{c+=1} END if c (c>2) print $0' FILE

但是我收到此命令的错误消息。

4

1 回答 1

2

不需要awk这个:

[ $(wc -l < file) -ge 2 ] && cat file
    ^^^^^^^^^^    ^^^^^      ^^^^^^^^
    number of lines  |        print file if condition matched
               compare value

另外,请注意,您的语法无法实现,因为在读取文件(因此END )之后END评估了块,因此如果您,除了最后一行之外,您无法打印任何内容。print

awk '{c+=1} END if c (c>2) print $0' FILE

请注意,END块必须将其命令存储在括号内,printprint $0包含记录数(NRawk您的情况下为行数)相同。

总之,如果行数大于 2,要让您的命令正常工作并打印最后一行,您可以使用:

awk 'END{if (NR>2) {print}}' FILE

测试

$ [ $(wc -l a | cut -d' ' -f1) -ge 2 ] && cat a
A
B
C

$ [ $(wc -l a | cut -d' ' -f1) -ge 5 ] && cat a
于 2013-10-23T10:12:23.973 回答