두 개의 파일이 있는데 하나는 포함 NF=7
하고 다른 하나는 포함합니다NF=47
$2
파일에서 발생 횟수를 확인해야 합니다 NF=7
. 개수가 다음과 같은 경우 다음을 <=2
포함하는 동일한 파일에서 배열을 만들어야 합니다.arr1[$1]=$1
이 작업에는 다음 코드를 사용했습니다.
awk -F"," '{if(NF==7){arr[$2]++}}END{for(i in a){if(arr[i]<=2){print $0}}}'
두 번째 파일 작업의 경우 첫 번째 파일의 작업을 두 번째 파일의 작업과 $1
일치 시켜야 합니다.arr[$1]=$1
$1
다음 예를 찾아보세요.
파일 1:
1,111,,,,,,
2,111,,,,,,
3,100,,,,,,
4,111,,,,,,
파일 2:
1,799,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
2,899,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
3,999,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
산출:
3,999,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
답변1
당신은 비교할 수 있습니다NR
그리고FNR
첫 번째 파일 처리와 후속 파일 처리를 구별합니다. 이는 FNR
재설정이 파일 기준 NR
이 아니라 실행 횟수 기준이기 때문입니다 . 따라서 첫 번째 파일이 처리될 때만 조건이 충족됩니다 NR==FNR
.
"더 짧은" 파일을 처리하려면 먼저 다음을 수행해야 합니다.
awk -F, 'NR==FNR{mapper[$1]=$2;counter[$2]++}...'
그런 다음 기준에 맞을 때 인쇄되도록 "더 긴" 파일을 처리합니다.
awk -F, 'NR!=FNR&&counter[mapper[$1]]<=2'
두 가지를 합치면 다음과 같습니다.
awk -F, 'NR==FNR{mapper[$1]=$2;counter[$2]++}NR!=FNR&&counter[mapper[$1]]<=2'
기본적으로 awk
선택 기준이 일치하면 전체 줄이 인쇄되므로 이를 지정하면 됩니다 NR!=FNR&&counter[mapper[$1]]<=2
.