두 파일 사이의 공통 줄과 해당 파일의 줄 번호를 인쇄합니다.

두 파일 사이의 공통 줄과 해당 파일의 줄 번호를 인쇄합니다.

두 개의 파일이 있습니다. 한 파일의 내용을 다른 파일의 내용과 비교하고 싶습니다. 두 파일 사이에 일치하는 줄이 있으면 각 파일의 줄과 줄 번호를 인쇄합니다. 예:

파일 1:

ABC
PQR
MNO
XYZ

파일 2:

qqqq
wewe
ABC
acdd
abcc
nop
MNO

예상 출력:

ABC       1      3
MNO       3      7
..

답변1

awk첫 번째 파일을 처리하고 행( )과 해당 행 번호( )(인덱스/값)를 연관 배열( )에 저장한 다음 $0NR번째 l[$0]파일을 처리하고 행이 배열 인덱스에 있는 경우 인쇄된 값은 l[$0]현재 줄 번호( FNR)입니다.

awk 'FNR==NR{l[$0]=NR; next}; $0 in l{print $0, l[$0], FNR}' file1 file2

답변2

#!/bin/sh

count_match() {
    grep -x -n -F -f "$1" "$2" | sed 's/\([0-9]*\):\(.*\)/\2 \1/' | sort
}

count_match file2 file1 > /tmp/$$A
count_match file1 file2 > /tmp/$$B
join /tmp/$$[AB]

rm /tmp/$$[AB]

grep사용되는 옵션은 다음과 같습니다 .

-n일치하는 줄 번호 인쇄
-x전체 줄과 일치
-F리터럴 문자열만 일치 - 정규식 없음
-f filename파일에서 검색 패턴 읽기(이 경우 file1 또는 file2)

sed필드 순서를 전환하고 콜론을 제거하는 데 사용됩니다 :.

sort산출.

join두 임시 파일의 내용입니다.

이는 위 예에서 명령의 사용법과 출력을 보여줍니다.

$ grep -n -F -f file2 file1
1:ABC
3:MNO
$
$ grep -x -n -F -f file2 file1 | sed 's/\([0-9]*\):\(.*\)/\2 \1/' 
ABC 1
MNO 3
$
$ grep -x -n -F -f file1 file2 | sed 's/\([0-9]*\):\(.*\)/\2 \1/'
ABC 3
MNO 7
$ 

관련 정보