LoCでファイルディレクトリを並べ替えようとしています。
しかし、sort
ラインをパイプで接続すると何もしないようです。
paths=`find ./src/ | egrep "\.(cpp|h)$"`
for path in $paths; do
wc -l $path | sort -n;
done
結果は次のとおりです(予約注文でソートされますが、find
数字wc
は無視されます)。
50 /a/a.cpp
10 /a/a.h
200 /b/b.cpp
13 /b/b.h
...
パイプの代わりにファイルにソートを使用する場合:
for path in $paths; do
wc -l $path >> test.txt;
done
sort -n test.txt
それする働く:
```bash
10 /a/a.h
13 /b/b.h
50 /a/a.cpp
200 /b/b.cpp
...
パイプラインバージョンが機能しないのはなぜですか?
ベストアンサー1
それぞれwc
の出力を個別に、にsort
パイプします。ループの出力全体を処理するためにパイプを移動すると、次のように動作します。
paths=`find ./src/ | egrep "\.(cpp|h)$"`
for path in $paths; do
wc -l $path
done | sort -n
find
出力を繰り返さないでください。;また、フィルタリングされた出力egrep
に使用する必要はありません。find
以下を使用して上記のすべてのタスクを処理できます。
find ./src/ \( -name '*.cpp' -o -name '*.h' \) -exec wc -l {} \; | sort -n
または「全体」行があっても大丈夫ならより効率的に、
find ./src/ \( -name '*.cpp' -o -name '*.h' \) -exec wc -l {} + | sort -n
(ファイル名に改行文字が含まれていると、まだうまくいきません。)