2つのファイルを比較し、一致しない行番号を印刷しますか?

2つのファイルを比較し、一致しない行番号を印刷しますか?

差分行番号を印刷するには?

たとえば、ファイル 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 '/|/='

2つのファイルを並べて比較し、他の行にのみ行番号を表示します。

答え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

関連情報