0

我有一个包含数字的文本文件

数字.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
4

1 回答 1

3

如果要显示[0,999]范围内具有第二个字段的所有行并最终显示这些列的数量,那么这可以实现。不需要sort -nand wc -lawk本身就可以做到:

$ 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
于 2013-11-05T09:03:40.927 回答