Применение AWK для набора файлов с одинаковым расширением - PullRequest
0 голосов
/ 09 марта 2009

Я хочу применить следующую команду "awk" к файлам с расширением "* .txt"

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

будет работать.

Ответы [ 6 ]

4 голосов
/ 09 марта 2009

Как только вы удалите эхо, оно должно работать:

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 }' {} \;

(В основном, make find выполняет awk напрямую, а также распечатывает имена файлов.

3 голосов
/ 09 марта 2009
for i in *.txt; do echo "$i"; awk '$4 ~ /NM/{ sum += $2 } END{ print sum }' "$i"; done

Это напечатает имена обработанных файлов вместе с выводом команды awk.

2 голосов
/ 09 марта 2009

Вам необходимо добавить ';' :

for i in *.txt; do ...

вместо

for i in *.txt do ...
2 голосов
/ 09 марта 2009

Попробуйте (используйте nawk или / usr / xpg4 / bin / awk на Solaris ):

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 
1 голос
/ 09 марта 2009

эхо не требуется.

попробуй

для меня в * .txt; делать; awk '$ 4 ~ / NM / {sum + = $ 2} END {print sum}' $ i; сделано

или

для меня в * .txt; do awk '$ 4 ~ / NM / {sum + = $ 2} END {print sum}' $ i; сделано

должно работать

0 голосов
/ 09 марта 2009

Не уверен, что вы вставили копию или это опечатка.

для i в * .txt do echo awk '$ 4 ~ / NM / {sum + = $ 2} END {print sum}' $ i; сделано

С исправленным эхом приведенная выше команда выведет ваш скрипт awk и имя файла, но не запустит его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...