findでマッチしたファイルをxargsでcatに渡して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する
$ 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
