다음 명령을 실행하려고 합니다.
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를 사용하면 프로그램은 첫 번째 열이 전체 행과 동일한 행을 찾습니다).$i
i
awk
i
awk
mawk
$i
$0
mawk
awk
대신 셸 변수를 다음으로 "가져옵니다" 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의 답변쉘 루프를 사용하지 않고 이를 수행하는 방법을 보여줍니다.