동일한 확장자가있는 파일 세트에 AWK를 적용합니다
-
05-07-2019 - |
문제
확장자가있는 파일에 다음 "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 스크립트와 파일 이름을 반향하지만 실행되지는 않습니다.
제휴하지 않습니다 StackOverflow