문제

확장자가있는 파일에 다음 "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

작동 할 것이다.

도움이 되었습니까?

해결책

에코를 제거하면 작동해야합니다.

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

(기본적으로 execute awk를 직접 찾아 내고 파일 이름을 인쇄하십시오.

다른 팁

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

이것은 처리 된 파일의 이름을 출력과 함께 인쇄합니다. awk 명령.

이것을 시도하십시오 (사용하십시오 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 

A ';'를 추가해야합니다. :

for i in *.txt; do ...

대신에

for i in *.txt do ...

에코는 필요하지 않습니다.

노력하다

*.txt에서 i를 위해; 하다; awk '$ 4 ~ /nm /{sum += $ 2} end {print sum}'$ i; 완료

또는

*.txt에서 i를 위해; awk '$ 4 ~ /nm /{sum += $ 2} end {print sum}'$ i; 완료

작동해야합니다

붙임을 복사했는지 또는 오타인지 확실하지 않습니다.

*.txt를 위해 에코 awk '$ 4 ~ /nm /{sum += $ 2} end {print sum}'$ i; 완료

에코가 수정되면 위의 명령은 AWK 스크립트와 파일 이름을 반향하지만 실행되지는 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top