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

範囲内の 2 番目のフィールドを持つすべての行を表示し[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 に答える