공통 열에 있는 두 개의 유사한 파일을 비교하고 차이점을 출력하고 싶습니다. 이러한 파일은 동일한 헤더를 갖습니다. 특정 열의 차이점을 확인하고 싶습니다.
두 번째 파일 File2에는 추가 행이 있을 수 있지만 file1 열-Column2 값과 file2 열-Column2 값의 일치를 비교하고 Column3 값에 차이가 있으면 인쇄하고 싶습니다.
파일 1
Column1,Column2,Column3
Demosvc1,Demopod1,70647625e1b016f8c2b21eae7465b30e0b0375ea
Demosvc2,Demopod2,<none>
Demosvc3,Demopod3,0b12b9218e1a572e994a6b616059a618e8f5d9a0
Demosvc4,Demopod4,ca9802f0636c23d20daad17498b26df000205626
Demosvc6,Demopod6,ca9802f0636c23d20daad17498b26df000205626
파일 2
Column1,Column2,Column3
Demosvc1,Demopod1,70647625e1b016f8c2b21eae7465b30e0b0375ea
Demosvc2,Demopod2,20fd5948a80c5b06989f34b1c23a8e64afb7943e
Demosvc3,Demopod3,0b12b9218e1a572e994a6b616059a618e8f5d9a0
Demosvc4,Demopod4,551fbe73e835528da8269bac3652c6a64ecf4097
Demosvc5,Demopod5,4ae6230593c13b3a50e7b8e6cf0fe5fcc4a0fda2
Demosvc6,Demopod6,ca9802f0636c23d20daad17498b26df000205626
차이점을 이렇게 인쇄하고 싶습니다.
원하는 출력
Demopod2,<none>,20fd5948a80c5b06989f34b1c23a8e64afb7943e
Demopod4,ca9802f0636c23d20daad17498b26df000205626,551fbe73e835528da8269bac3652c6a64ecf4097
답변1
awk -F',' '{
if (NR==FNR) a[$1$2]=$3
else if (a[$1$2]!="" && a[$1$2]!=$3) print $2","a[$1$2]","$3
}' file1 file2
a
첫 번째 파일을 처리할 때 첫 번째 및 두 번째 필드를 키로 사용하여 세 번째 필드의 값을 배열에 저장합니다 .
두 번째 파일을 처리할 때 세 번째 필드의 값과 일치하지 않는 비어 있지 않은 배열 값에 대한 키를 비교하십시오. 이 경우 두 번째 필드, 배열 값 및 세 번째 필드를 인쇄하십시오.
답변2
밀러 사용(https://github.com/johnkerl/miller) 당신은 실행할 수 있습니다
mlr --headerless-csv-output --csv join --lp l_ --rp r_ -f input_01.csv -j Column2 then \
cut -f Column2,l_Column3,r_Column3 then \
filter '$l_Column3!=$r_Column3' \
input_02.csv
얻다
Demopod2,<none>,20fd5948a80c5b06989f34b1c23a8e64afb7943e
Demopod4,ca9802f0636c23d20daad17498b26df000205626,551fbe73e835528da8269bac3652c6a64ecf4097
몇 가지 참고사항:
join --lp l_ --rp r_ -f input_01.csv -j Column2
연결 및 출력의 출력 필드 접미사 이름을 설정합니다.cut -f Column2,l_Column3,r_Column3
Column2와 왼쪽, 오른쪽 Column 3 추출filter '$l_Column3!=$r_Column3'
왼쪽 Column3이 오른쪽 Column3과 같지 않은 모든 행을 필터링합니다.
답변3
join --header -j2 -t, -o 1.2,1.3,2.3 FILE1 FILE2
- --header 첫 번째 줄을 헤더로 처리
- -j2 열 2에 조인
- -t에 별도의 열,
- -o ... 파일1-열2 파일1-열3 파일2-열3을 인쇄합니다.
참고: join
조인 필드에서 입력 파일을 정렬해야 합니다.