スポンサーリンク

findでマッチしたファイルをxargsでcatに渡してawkで処理

※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-

※MACターミナル(BSD系)での動作確認です。

例えば、下記のディレクトリとファイルがあったとします。

$ tree
.
├── dir001
│   └── dir
│       └── file3.c
├── dir002
│   ├── dir
│   │   └── file2.c
│   └── file1txt
└── file3.c

4 directories, 4 files

findで"file*"にマッチするファイルの2列目の総和を算出します。
参考:[c言語]findとxargsで再帰的にrm/cpする

参考:awkの列の総和と平均を求める

$ find . -type f -name "file*" | xargs -I{} cat {} | awk -F, '{sum+=$2} END{print "sum="sum}'
sum=461

それぞれのコマンドの処理を分解してみたいと思います。

まずはfind処理です。

$ find . -type f -name "file*"
./dir001/dir/file3.c
./dir002/dir/file2.c
./dir002/file1txt
./file3.c

xargsでファイルをcatコマンドに渡します。
$ find . -type f -name "file*" | xargs -I{} cat {}
1,1
2,2
3,3
1,23
2,77
8,44
1,23
2,33
3,67
1,99
2,11
3,78

最後、awkで2列目の総和を算出します。
$ find . -type f -name "file*" | xargs -I{} cat {} | awk -F, '{sum+=$2} END{print "sum="sum}'
sum=461

スポンサーリンク