2014-01-27 2 views
0

다음 작업을 돕기 위해 간단한 명령 줄을 찾고 있습니다.특정 열에서만 공통 값을 고려하는 명령 줄

두 개의 파일이 있고 공통으로 Col2에 값이있는 행을 인쇄하고 싶습니다. 을 File1 다음 3 열 탭과 유사한 예를 들어

제가 시도

big 
red 

을 File1

cat big 24 
cat small 13 
cat red 63 

있는 File2

dog big 34 
chicken plays 39 
fish red 294 

원하는 출력 구분 명령 s 구문을 사용하여 : comm /path/to/file1/ /path/to/file2 그러나 Col1 및 Col3 값이 거의 공통적으로 없기 때문에 아무 것도 출력하지 않습니다. 해결 방법에 대한 제안 사항이 있습니까? awk이 더 좋은 해결책일까요?

답변

1

comm의 설명서 페이지를 읽으면 sorted 파일과 함께 작동하는 것을 볼 수 있습니다. 그러나 AWK는 유연, 당신은 당신이 원하는 것을 제어 할 수 있습니다

awk 'NR==FNR{a[$2]=1;next}a[$2]{print $2}' file1 file2 
1

당신은 pasteawk으로 단일 패스에서 그것을 할 수 :

paste file1 file2 | awk '$2 == $5 { print $2 }' 

출력은 :

big 
red 
+0

이 위험하다 .. file2의 줄에 대해 생각해 보면'red then big'입니다. – Kent

+0

@Kent : 물론 이것은'file1'의'n' 행이'file2'의'n' 행과 비교되어야한다고 가정합니다. 이것이 제가이 질문을 이해 한 방법입니다. – Thor