두 파일을 비교하고 빈 줄을 인쇄하여 일치하지 않는 파일을 찾으시겠습니까?

두 파일을 비교하고 빈 줄을 인쇄하여 일치하지 않는 파일을 찾으시겠습니까?

두 파일을 일치시키고 일치하는 결과를 인쇄하려고 합니다. "숫자" 열 3을 기준으로 일치하지 않는 결과에 대해 빈 행을 남겨 둡니다. 여기서 아이디어는 두 파일을 같은 길이로 만드는 것입니다.

예: 파일 1

BMW 111  N1
BENZ 123 N2
TOYOTA 122 N3 

파일 2

N1
N23
N3 

결과:

BMW 111 N1
*blank line (N23 does not exit in file 1*
TOYOTA 122 N3 

이 두 파일을 일치시키기 위해 AWK를 사용하고 있지만 삽입할 수 없습니다.빈 줄

awk 'NR==FNR{a[$1];next}$3 in a{print $1,$2,$3}' file2.txt file1.txt > result.txt 

좋다https://stackoverflow.com/questions/977408/how-do-i-insert-a-blank-line-every-n-lines-using-awk

답변1

대신에 $3 in a{print $1,$2,$3}시도해 보세요 !($3 in a){$0 = ""} 1.

답변2

for line in $(cat file2); 
do
   grep $line file1 || echo ""; 
done

다음 출력을 생성합니다

$ for line in $(cat file2); do   grep $line file1 || echo ""; done
BMW 111  N1

TOYOTA 122 N3
$

답변3

두 파일이 모두 조인 필드에 정렬되어 있다고 가정합니다.

$ join -1 3 -a 2 -o1.1,1.3,1.3 file1 file2
BMW N1 N1

TOYOTA N3 N3

file1-1 3세 번째 열과 첫 번째(유일한) 열을 사용하여 두 파일에 대해 관계형 JOIN 작업을 수행 합니다 file2. 짝이 없는 행을 포함하여 file2출력에 포함된 모든 행(포함)을 요청합니다 -a 2. 출력을 위해 첫 번째 파일의 세 필드가 모두 인쇄되도록 요청합니다( flags 사용 -o). 일치하지 않는 줄의 빈 필드는 비어 있는 상태로 유지되지만 -e something문자열을 추가하여 채울 수 있습니다 something.

파일이 2개라면아니요조인 필드를 정렬하려면 다음을 사용하여 미리 정렬할 수 있습니다.

sort -k3 -o file1 file1
sort -o file2 file2

또는 쉘이 프로세스 대체를 지원하는 경우 연결하는 동안 다음을 사용하여 정렬할 수 있습니다.

join -1 3 -a 2 -o1.1,1.3,1.3 \
    <( sort -k3 file1 ) \
    <( sort file2 )

답변4

  paste file1.txt file2.txt | sed -Ee 's/\s(\S+)\s+\1\s*$/ \1/;t'  -e g

그러면 파일의 내용이 각 줄에 나란히 인쇄되고 Gnu sed가 이 줄에서 작동하게 됩니다.

파일의 마지막 필드가 일치하면 해당 줄에서 해당 필드를 제거하고 인쇄합니다. 그렇지 않으면 빈 저장 공간에서 검색된 빈 줄을 인쇄합니다.

또 다른 방법은 다음과 같습니다.

paste a.txt b.txt | awk '{NF -= $(NF) == $(NF-1) ? 1 : NF}1'

관련 정보