如何打印差异行号?
例如,比较文件 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
之外的所有行,请使用行号 ( )”。-v
file1
-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