这些天我在shell脚本方面遇到了一些困难。 完成一些测试仍然无法使其工作。 我正在尝试将文本文件中的每一行与另一个文本文件进行比较。我的想法是查看文件中是否有某些行。
有人可以看到我的剧本出了什么问题吗?
谢谢!
#!/bin/bash
FILE1='/filePath/file.txt'
FILE2='/filePath/file2.txt'
for line in $FILE1
do
for line2 in $FILE2
do
if $line != $line2
then
echo -e /> diffsScr.txt
fi
done
done
答案 0 :(得分:3)
awk 'FNR==NR{f[$0]+=1; next} !($0 in f)' input1 input2
这将读取文件input1
并构建一个数组。然后它会经过input2
并打印出input1
中未显示的每一行。如果您想添加行号:
awk 'FNR==NR{f[$0]+=1; next} !($0 in f) { print FNR, $0}' input1 input2
这种方法的一大优势是它可以很好地扩展。你的方法是O(n * m),其中n和m是文件中的行数,但预先读入这样的数组会给你一个O(n + m)的解决方案。换句话说,您只能阅读每个文件一次。
答案 1 :(得分:0)
您可以使用以下命令实现此结果:
fgrep -v -x -f '/filePath/file2.txt' '/filePath/file1.txt'
答案 2 :(得分:0)
如果您的文件已排序,您可以使用 comm 来比较文件。
comm -23 file1 file2
comm的描述:
Compare sorted files FILE1 and FILE2 line by line.
With no options, produce three-column output. Column one contains
lines unique to FILE1, column two contains lines unique to FILE2, and
column three contains lines common to both files.
-1 suppress column 1 (lines unique to FILE1)
-2 suppress column 2 (lines unique to FILE2)
-3 suppress column 3 (lines that appear in both files)