比较两个文件中的行

发布于 2024-08-07 22:38:43 字数 153 浏览 2 评论 0原文

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

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

how could we compare lines in two files using a shell script.

I want to compare line in one file with the line in other.diff will give me all the differences in two files at a time.i want a line in the first file to be compared with all the lines in the second file and get the common lines as the output. with the line numbers where the lines are present in the second file.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

℡Ms空城旧梦 2024-08-14 22:38:43

我不确定您到底在问什么,但是怎么样:

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

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

I am not sure exactly what you are asking, but how about:

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

This will give you the numbered lines in FILE2 that do not contain the 1st line in FILE1.

⒈起吃苦の倖褔 2024-08-14 22:38:43
comm -12 file1 file2

将显示 file1 和 file2 共有的行

comm -12 file1 file2

will show the lines common to both file1 and file2

茶底世界 2024-08-14 22:38:43
#!/bin/sh
diff $1 $2
#!/bin/sh
diff $1 $2
余生共白头 2024-08-14 22:38:43

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

grep -n is the tool to use in your case. As the pattern, you put the line in the first file that you want to find in the second one. Make your pattern start with ^ and end with $ and put quotes around it.

枫林﹌晚霞¤ 2024-08-14 22:38:43

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

我认为这已经很接近了。

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

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

I want to compare line one file with the other.diff will give me all the differences in two files at a time.i want a line in the first file to be compared with all the lines in the second file and get the common lines as the output. with the line numbers where the lines are present in the second file

I think this gets close.

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

cat $REF | while read line
do
  echo "line: $line"
  echo '==========='
  grep -n $line $TARGET
done
第七度阳光i 2024-08-14 22:38:43

这一点也不优雅,但很简单

let filea be:

foo
bar
baz
qux
xyz
abc

and fileb be:

aaa
bar
bbb
baz
qux
xxx
foo

then:

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

将输出:

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

This is not elegant at all, but it is simple

let filea be:

foo
bar
baz
qux
xyz
abc

and fileb be:

aaa
bar
bbb
baz
qux
xxx
foo

Then:

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

Will output:

7:foo
2:bar
4:baz
5:qux
究竟谁懂我的在乎 2024-08-14 22:38:43

您可以使用 comm 命令来比较 2 个文件,该文件以 SET 操作格式给出输出
像 a - b、交集 b 等。

这给出了两个文件中的公共行。
comm -12 <(排序第一个.txt | uniq) <(排序第二个.txt | uniq)

语法
comm [选项]... 文件 1 文件 2

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

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

you can use comm command to compare 2 files which gives the output in a SET operations format
like a - b, a intersection b etc.

this gives the common lines in both files.
comm -12 <(sort first.txt | uniq) <(sort second.txt | uniq)

Syntax
comm [options]... File1 File2

Options
-1 suppress lines unique to file1
-2 suppress lines unique to file2
-3 suppress lines that appear in both files

A file name of `-' means standard input.

毅然前行 2024-08-14 22:38:43

将下面的代码粘贴到名为 intersect.sh 的文件中,

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

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

chmod 777 intersect.sh

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

./intersect.sh nameOfLongerFile nameOfShorterFile 

paste the code below into a file called intersect.sh

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

then make sure you have execute permissions on the file

chmod 777 intersect.sh

then run this command, substituting the names of your two files

./intersect.sh nameOfLongerFile nameOfShorterFile 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文