0

拡張子が「*.txt」のファイルに以下の「awk」コマンドを適用したい

awk '$4 ~ /NM/{ sum += $2 } END{ print sum }'

しかし、このコマンドが機能しない理由:

for i in *.txt do echo awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; done

通常は、

awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' file1.txt

動作します。

4

6 に答える 6

4

エコーを削除すると、動作するはずです:

for i in *.txt do awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; done

スペースが含まれるテキスト ファイルがある場合は失敗します。これを試すことができます。

find . -name '*.txt' -print0 | xargs --null -n 1 awk '$4 ~ /NM/{ sum += $2 } END{ print sum }'

名前を出力する別の方法:

find . -name '*.txt' -print -exec awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' {} \;

(基本的に、find は awk を直接実行するので、ファイル名も出力します。

于 2009-03-09T09:47:21.080 に答える
2

「;」を追加する必要があります :

for i in *.txt; do ...

それ以外の

for i in *.txt do ...
于 2009-03-09T14:29:38.607 に答える
2

これを試してください ( Solarisではnawkまたは/usr/xpg4/bin/awkを使用します):

awk 'END {
  printf "%s: %.2f\n", fn, sum
  }
FNR == 1 {
  if (fn) printf "%s: %.2f\n", fn, sum
  fn = FILENAME
  sum = 0
  }
$4 ~ /NM/ { 
  sum += $2 
  }' *.txt 
于 2009-03-09T11:09:46.640 に答える
1

エコーは必要ありません。

試す

for i in *.txt; 行う; awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; 終わり

また

for i in *.txt; do awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; 終わり

動作するはずです

于 2009-03-09T09:46:24.763 に答える
0

コピペなのか誤字なのか不明。

for i in *.txt do echo awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' $i; 終わり

エコーを修正すると、上記のコマンドは awk スクリプトとファイル名をエコーし​​ますが、実行はしません。

于 2009-03-09T09:43:50.840 に答える