두 파일을 비교하고 일치하지 않는 줄 번호를 인쇄하시겠습니까?

두 파일을 비교하고 일치하지 않는 줄 번호를 인쇄하시겠습니까?

차등 라인 번호를 인쇄하는 방법은 무엇입니까?

예를 들어, 파일 1을 파일 2와 비교하고 파일 2의 차이 레코드의 줄 번호를 인쇄합니다.

파일 1에서:

userD
user3
userA
user1
userB

그리고

파일 2에서:

user3
userB
userX
user1
user7

예상 결과:- file2의 차이점은 줄 번호 3,5입니다.

답변1

$ grep -n -v -f file1 file2
3:userX
5:user7

이는 "( )를 제외하고 ( ) 안의 모든 줄을 알려주십시오. file2줄 번호 ( )를 사용하십시오"라는 의미입니다.-vfile1-f file1-n

첫 번째 부분만 원한다면 다음을 필터링하세요 cut.

$ grep -n -v -f file1 file2 | cut -d ':' -f 1
3
5

답변2

bash-4.1$ cat file1
userD
user3
userA
user1
userB

bash-4.1$ cat file2
user3
userB
userX
user1
user7

bash-4.1$ awk 'NR==FNR{Arr[$0]++;next}!($0 in Arr){print FNR}' file1  file2
3
5

답변3

sdiff file1 file2 | sed -n '/|/='

두 파일을 나란히 비교하고, 다른 줄에 대해서만 줄 번호를 표시합니다.

답변4

Bash 스크립트는 file1에 없는 file2의 모든 줄의 줄 번호를 인쇄합니다.

#!/usr/bin/env bash

# read files into arrays
mapfile -t a < file1
mapfile -t b < file2

# copy file1 into an associative array
declare -A lines
for i in "${!a[@]}" ; do
  lines["${a[$i]}"]=$i
done

# loop through file2 and report any line numbers for lines missing from file1
for i in "${!b[@]}" ; do
    if [ "${lines[${b[$i]}]}" == "" ] ; then
        # echo line number for extra line
        echo $(($i + 1))
    fi
done

관련 정보