我有一个包含数字的文本文件
numbers.txt
a,1
b,2
c,2000
d,1001
e,4
f,3
我正在尝试从第2列获取所有值并进行行计数并打印总数
awk -F, '{if($2 >= 0 && $2 <= 999) print "%10s" "%40s" , "Total", $2}' "numbers.txt" | sort -n | wc -l
它只给出了这个
的输出4
如果我使用printf
awk -F, '{if($2 >= 0 && $2 <= 999) printf "%10s" "%40s" , "Total", $2}' "numbers.txt" | sort -n | wc -l
它只给出了这个
的输出1
而我需要输出像这样
total 4
答案 0 :(得分:3)
如果要显示[0,999]
范围内具有第二个字段的所有行,并最终显示这些列的数量,那么这可以实现。无需sort -n
和wc -l
,awk
本身就可以做到:
$ awk -F, '($2 >= 0 && $2 <= 999) {printf "%10s %40s\n" , "Total", $2; i++} END{print "total: "i}' file
Total 1
Total 2
Total 4
Total 3
total: 4
如果你只想要总和:
$ awk -F, '($2 >= 0 && $2 <= 999) i++} END{print "total: "i}' file
total: 4
为什么你的命令不起作用?
使用print
:
$ awk -F, '{if($2 >= 0 && $2 <= 999) print "%10s" "%40s" , "Total", $2}' a | sort -n
%10s%40s Total 1
%10s%40s Total 2
%10s%40s Total 3
%10s%40s Total 4
行数没问题,但格式不是:要使用%10s
,您需要使用printf
。
使用printf
:
$ awk -F, '{if($2 >= 0 && $2 <= 999) printf "%10s" "%40s" , "Total", $2}' a
Total 1 Total 2 Total 4 Total 3
根据使用printf
而不打印新行,所有输出都在同一行。您只需在每个\n
:
printf
$ awk -F, '{if($2 >= 0 && $2 <= 999) printf "%10s %40s\n", "Total", $2}' file
Total 1
Total 2
Total 4
Total 3