본문에 awk 명령이 포함된 For 루프가 작동하지 않습니다.

본문에 awk 명령이 포함된 For 루프가 작동하지 않습니다.

다음 명령을 실행하려고 합니다.

for i in test1.txt do awk '$1==$i {sum +=$4}END {print sum}' test2.txt

그 중 test1.txt는 다음과 같습니다.

A
B
C
D
E

그러나 이것은 작동하지 않습니다. 내가 달성하고 싶은 것은테스트1.txt파일, 모든 줄 찾기test2.txt첫 번째 열에 동일한 문자가 있는 행, 이 행의 경우 네 번째 열의 모든 값을 추가합니다 .

답변1

여기서는 awk단독으로 사용할 수 있습니다.

awk 'NR==FNR{a[$1]++; next} ($1 in a) {sum+=$4} END{print sum}' file1.txt file2.txt

답변2

이것이 작성한 방식대로 작동하지 않는 이유는 " 번째 필드" 로 awk해석되고 해당 변수 에 값이 없으므로 오류가 발생하거나 GNU 또는 를 사용하는 경우 동일하기 때문입니다 . 이는 전체 행이므로( 또는 GNU를 사용하면 프로그램은 첫 번째 열이 전체 행과 동일한 행을 찾습니다).$iiawkiawkmawk$i$0mawkawk

대신 셸 변수를 다음으로 "가져옵니다" awk.

awk -v i="$i" '$1 == i { sum += $4 } END { print sum }' test2.txt

또한 쉘 변수의 값은 $i단지 파일 이름이 될 것입니다 test1.txt(그것이 반복되는 것이기 때문입니다).

주기콘텐츠파일:

while IFS= read -r i; do
    awk ...as above...
done <test1.txt

αГsнιn의 답변쉘 루프를 사용하지 않고 이를 수행하는 방법을 보여줍니다.

관련 정보