質問: awkコマンドを使って、ディレクトリ名とその中にあるファイルの行数を取得しようとしています。 ディレクトリの中に複数のファイルが入っており、その中の「FastCallResults_ディレクトリ名.txt」の行数が知りたいです。 自分が行った方法は、 ls -l | awk -F " " '{ print $NF }' のコマンドを名前を取得したいディレクトリをまとめたディレクトリで実行し、ディレクトリ名を取得した後、miで下のように書き直しました。 cat <(wc -l ./*/FastCallResults_ディレクトリ1.txt) <(wc -l ./*/FastCallResults_ディレクトリ2.txt) <(wc -l ./*/FastCallResults_ディレクトリ3.txt)... 得られた結果は 114 ./ディレクトリ1/FastCallResults_ディレクトリ1.txt 158 ./ディレクトリ2/FastCallResults_ディレクトリ2.txt 212 ./ディレクトリ3/FastCallResults_ディレクトリ3.txt となっています。 これでも欲しい情報は取得できているのでいいのですが、awkコマンドで 'ディレクトリ名' '行数' という形でデータを一発で取得できる方法があれば大変助かります。 いい方法をご存知の方がいらっしゃいましたら、教えていただけますと幸いです。 よろしくお願い致します。
回答: awkの機能が生かせるところじゃないので、シェルスクリプトが良いと思います。 ``` for i in * do if [ -d "$i" -a -f "$i/FastCallResults_$i.txt" ] then echo $i `wc -l < "$i/FastCallResults_$i.txt"` fi done ``` ・直下にはディレクトリしか無い ・各ディレクトリには必ず`FastCallResults_ディレクトリ名.txt`がある であれば、`if`は不要で、 ``` for i in * do echo $i `wc -l < "$i/FastCallResults_$i.txt"` done ``` ・`FastCallResults_`で始まる他のファイルが無い であれば、合計行も残りますが、 ``` wc -l */FastCall* | awk '{sub(/\/.*/,"",$2);print $2,$1}' ``` 合計行を消すのは、簡単には、`| sed '$d'`