숫자 목록에서 숫자가 포함된 파일의 줄을 선택하는 방법

숫자 목록에서 숫자가 포함된 파일의 줄을 선택하는 방법

file.dat공백으로 구분된 많은 열이 포함된 텍스트 파일이 있습니다 . 두 번째 열에는 숫자가 있습니다. select.dat숫자 목록이 포함된 다른 텍스트 파일이 있습니다 . file.dat두 번째 열의 숫자가 에 포함되도록 첫 번째 텍스트 파일( )에서 행을 선택하고 싶습니다 select.dat. 그 안에 포함된 숫자가 다른 열에 존재할 수 있기 grep -f selected.dat file.dat때문에 을 사용하면 작동하지 않습니다 . select.dat하지만 두 번째 열에 이 숫자가 포함된 행만 선택하고 싶습니다. 어떻게 해야 하나요?

답변1

사용 awk. awk연관 배열을 사용하면 select.dat값을 할당할 필요 없이 숫자를 키로 사용하여 배열을 만들 수 있습니다. 그런 다음 간단한 확인 "___ in <arrayname>"을 필터로 사용하여 인쇄할 내용을 결정할 수 있습니다.

NR"레코드 번호"를 나타내고 FNR"파일 레코드 번호"를 나타냅니다. 이 테스트는 FNR == NR본질적으로 "아직 첫 번째 파일을 처리 중입니까?"를 의미합니다. 따라서 다음 코드는 첫 번째 주어진 파일의 행을 키로 사용하여 배열(값 없음)을 구축합니다. 그런 다음 생성된 배열에서 두 번째 필드가 발견된 두 번째 파일의 행만 인쇄합니다.

awk 'FNR == NR {myarray[$0]; next} $2 in myarray { print }' select.dat file.dat

관련 정보