私はファイル内のレコード数(行数)とディレクトリ内のファイル名をoutput.txtファイルに保存するBashスクリプトを作成しました。
出力 .txt ファイルは次のようになります。
No.ofRecord FileName delimiter
563394 1--UnixfileName.txt 28
364794 2--UnixfileName.txt 28
785895 3--UnixfileName.txt 28
99778453 1--NextUnixFileName.txt 18
95645453 2--NextUnixFileName.txt 18
99745313 3--NextUnixFileName.txt 18
希望する結果
出力.txt
No.ofRecord FileName delimiter
563394 1--UnixfileName.txt 28
364794 2--UnixfileName.txt 28
785895 3--UnixfileName.txt 28
99778453 1--NextUnixFileName.txt 18
95645453 2--NextUnixFileName.txt 18
99745313 3--NextUnixFileName.txt 18
TOTAL :
1714083 UnixfileName
295169219 NextUnixFileName
メモ:
ファイル名がUnixFileNameに似ている場合は、No.ofRecordを合計します。
ファイル名がNextUnixFileNameに似ている場合、No.ofRecordが合計されます。
よろしくお願いします。
答え1
$ awk 'NR > 1 { k = substr($2, 4); cnt[k] += $1 } { print } END { print "\nTOTAL:"; for (k in cnt) print cnt[k], k }' file
No.ofRecord FileName delimiter
563394 1--UnixfileName.txt 28
364794 2--UnixfileName.txt 28
785895 3--UnixfileName.txt 28
99778453 1--NextUnixFileName.txt 18
95645453 2--NextUnixFileName.txt 18
99745313 3--NextUnixFileName.txt 18
TOTAL:
1714083 UnixfileName.txt
295169219 NextUnixFileName.txt
スクリプトは、4番目の文字で始まるキーにawk
基づいて最初の列をk
2番目の列に合計します。これは、最初の行(ヘッダー)を除くファイルのすべての入力行で行われます。すべての入力ラインは、変更されずに出力に渡されます。
最後に、見つかった各キーの総数を印刷します。
合計の列幅を残りのデータと同じにするには、最後の列をprint cnt[k], k
次の形式に変更できます。
printf("%-15d%s\n", cnt[k], k)
数値を左揃えの 15 文字幅の整数にフォーマットします。