저는 Ubuntu 18을 사용하고 있으며 Linux 명령에 대한 경험이 거의 없습니다. 두 개의 파일이 있습니다.
파일 1:
a,txt1,v1
b,txt2,v2
c,txt3,v1
d,txt4,v2
파일 2:
a,txt5,v2
b,txt6,v1
c,txt7,v1
d,txt8,v2
첫 번째 열의 값은 같고 세 번째 열의 값이 에서 로 변경된 첫 번째 열과 세 번째 열의 값을 인쇄하고 v1
싶습니다 v2
. 따라서 내 예상 결과는 다음과 같습니다.
a
v2
두 번째 쿼리는 에서 로 변경된 세 번째 열 값에 대한 것입니다 v1
. 그래서 내 예상 결과는 다음과 같습니다.
b
답변1
$ join -t, file1 file2 | awk -F, '$3 == "v1" && $5 == "v2" { print $1 }'
a
$ join -t, file1 file2 | awk -F, '$3 == "v2" && $5 == "v1" { print $1 }'
b
이는 두 파일이 모두 정렬되어 있다고 가정합니다. 그렇지 않은 경우
join -t, <( sort file1 ) <( sort file2 ) | awk ...as above...
이 join
명령은
a,txt1,v1,txt5,v2
b,txt2,v2,txt6,v1
c,txt3,v1,txt7,v1
d,txt4,v2,txt8,v2
이는 첫 번째 열을 조인 키로 사용하여 두 파일 간의 관계형 조인의 결과입니다. 여기에는 동일한 조인 키를 가진 두 파일의 행과 각 파일의 다른 필드가 나열됩니다.
awk
코드는 이를 보고 3열과 5열에 우리가 찾고 있는 값이 있는 경우에만 첫 번째 열을 인쇄합니다.