file1에는 내 신용카드 청구 내역 목록이 포함되어 있습니다.
A B
1/1/2020 $12.50
1/3/2020 $10.00
1/5/2020 $99.15
1/6/2020 $35.50
1/8/2020 $99.00
file2에는 합법적인 구매 목록이 포함되어 있으며 날짜가 반드시 일치할 필요는 없지만 B열의 금액은 일치해야 합니다.
A B
12/31/2020 $12.50
1/4/2020 $99.15
1/6/2020 $99.00
일치를 위해 열 B를 사용하면 file2에 일치하는 레코드가 없는 file1의 레코드를 어떻게 찾을 수 있습니까?
A B
1/3/2020 $10.00
1/6/2020 $35.50
미리 감사드립니다!
답변1
$ awk 'NR==FNR{cnt[$2]++; next} (FNR==1) || (--cnt[$2] < 0)' file2 file1
A B
1/3/2020 $10.00
1/6/2020 $35.50
답변2
awk -F'$' '
FNR==NR{ if (FNR>1){ a[$2]++} next }
$2 in a && a[$2]{ a[$2]--; next }
1
' file2 file1
값을 file2
배열에 저장하고 카운터를 증가시켜 헤더 행을 건너뜁니다. 다음 줄로 계속 진행하세요.
처리하는 동안 file1
해당 값이 배열에 존재하는지, 카운터가 0이 아닌지 테스트합니다. 이 경우 카운터를 감소시키고 다음 줄로 계속 진행합니다.
그렇지 않으면 현재 줄을 인쇄합니다.
답변3
글쎄요, 그렇지는 않습니다 awk
. 조금 지저분하지만 경기에 대한 더 많은 정보를 제공합니다.
join -a 2 -j 2 <(sort -k 2 legit) <(sort -k 2 charged)
그리고 awk
위의 다른 변형
awk 'NR==FNR{legit[$2]++; next}{legit[$2]--}legit[$2]<0{legit[$2]=0; print}' legit charged
답변4
주문하다
awk 'NR==FNR{a[$2];next}!($2 in a){print $0}' file2 file1
산출
1/3/2020 $10.00
1/6/2020 $35.50