如何在AWK中处理输出后打印END块?

时间:2017-07-20 16:44:14

标签: awk

执行时:

CDialog

我明白了:

awk -F '|' 'BEGIN{print "head"}{print $3|"head"}END{print "bottom"}' d16.txt

相反,我想要这个:

head
bottom
3823
9386
7152
8137
1933
1137
3921
2585
9637
0626

注意head 3823 9386 7152 8137 1933 1137 3921 2585 9637 0626 bottom 命令,它确实存在,因为如果我在整个awk命令之后使用它,我将丢失底部字符串,但无论如何它都没有表现出预期。

1 个答案:

答案 0 :(得分:2)

为了避免需要调用head,只需添加一个条件:

awk -F '|' 'BEGIN{print "head"}NR<=10{print $3}END{print "bottom"}' d16.txt

现在,您仍然只能按照正确的顺序获得前10行,而无需调用单独的程序。

正如其他人在评论中提到的那样,您可以通过退出10行而不是阅读整个文件来提高效率:

awk -F '|' 'BEGIN{print "head"}{print $3}NR==10{exit}END{print "bottom"}' d16.txt

对于一个小文件,这不会产生太大影响,但是在较大的文件上使用这种方法是值得的。