比较两个文件并打印不匹配的行号?

比较两个文件并打印不匹配的行号?

如何打印差异行号?

例如,比较文件 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 脚本打印 file2 中不在 file1 中的任何行的行号:

#!/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

相关内容