두 개의 awk 입력 파일이 있는 배열

두 개의 awk 입력 파일이 있는 배열

두 개의 파일이 있는데 하나는 포함 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.

관련 정보