比较两个文件中的行

时间:2009-10-14 13:46:12

标签: unix shell sed awk

我们如何使用shell脚本比较两个文件中的行。

我想将一个文件中的行与另一个文件中的行进行比较。diff将一次给出两个文件中的所有差异。我希望第一个文件中的一行与所有行进行比较在第二个文件中,并将公共行作为输出。使用第二个文件中存在行的行号。

8 个答案:

答案 0 :(得分:2)

我不确定你在问什么,但是怎么样:

grep -n -v "`head -1 FILE1`" FILE2

这将为您提供FILE2中不包含FILE1中第一行的编号行。

答案 1 :(得分:1)

comm -12 file1 file2

将显示file1和file2

共有的行

答案 2 :(得分:0)

#!/bin/sh
diff $1 $2

答案 3 :(得分:0)

grep -n是您的案例中使用的工具。作为模式,您将该行放在第一个要在第二个文件中找到的文件中。使您的模式以^开头并以$结尾并在其周围加上引号。

答案 4 :(得分:0)

  

我想将第一行文件与另一个文件进行比较。我将一次给出两个文件中的所有差异。我希望第一个文件中的一行与第二个文件中的所有行进行比较并得到公共线作为输出。使用第二个文件中存在行的行号

我认为这很接近。

#!/bin/sh
REF='a.txt'
TARGET='b.txt'

cat $REF | while read line
do
  echo "line: $line"
  echo '==========='
  grep -n $line $TARGET
done

答案 5 :(得分:0)

这根本不优雅,但很简单

filea成为:

foo
bar
baz
qux
xyz
abc

fileb是:

aaa
bar
bbb
baz
qux
xxx
foo

然后:

while read a ; do
  grep -n "^${a}$" fileb ;
done < filea

将输出:

7:foo
2:bar
4:baz
5:qux

答案 6 :(得分:0)

您可以使用comm命令比较2个文件,这些文件以SET操作格式提供输出 比如a - b,交叉路口等。

这给出了两个文件中的公共行。 comm -12&lt;(sort first.txt | uniq)&lt;(sort second.txt | uniq)

语法       comm [options] ... File1 File2

选项    -1抑制file1特有的行    -2抑制file2特有的行    -3抑制两个文件中出现的行

文件名“ - ”表示标准输入。

答案 7 :(得分:0)

将下面的代码粘贴到名为intersect.sh

的文件中
while read line  
do
  grep -n "^${line}$" $2;
done < $1

然后确保您对文件具有执行权限

chmod 777 intersect.sh

然后运行此命令,替换两个文件的名称

./intersect.sh nameOfLongerFile nameOfShorterFile