我遇到了一些我自己无法解决的奇怪问题。我有两个文件,内容如下:
FILE1.TXT
Butterscotch;lkt+4S7Yhzf/g
Sox;WrWMzN6HD
Table;K4yPIK+SFfTFs
tram;YaY3opP9ie
number;e/WwiF5aihUY
Buttler;Nsadlkt+4S7Yhz
wzahwahwah;PYaY3opP9ieH
File2.txt
Butterscotch;lkt+4S7Yhzf/g
Sox;WrWMzN6HD
Table;K4yPIK+SFfTFs
tram;YaY3opP9ie
number;e/WwiF5aihUY
我需要找到这两个文件之间的差异,但仅针对分号之前的条目,因此我首先使用awk
来获取这些条目:
awk 'BEGIN {FS=";"}; {print $1}' File1.txt > Output1.txt
awk 'BEGIN {FS=";"}; {print $1}' File2.txt > Output2.txt
新文件包含以下条目:
Output1.txt
Butterscotch
Sox
Table
tram
number
Buttler
wzahwahwah
Output2.txt
Butterscotch
Sox
Table
tram
number
然后我使用grep -Fxvf Output2.txt Output1.txt > Diff.txt
打印出Output2.txt和Output1.txt之间的差异,所以我的文件如下所示:
Diff.txt
Buttler
wzahwahwah
现在是棘手的部分。我需要从 File1.txt 中找到并打印出来自 Diff.txt 条目的整行代码。我正在声明一个变量并做这样的事情:
variable=$(cat Diff.txt)
grep $variable Output1.txt > Delete.txt
所以对于这个例子,我应该得到这样的东西:
Delete.txt
Buttler;Nsadlkt+4S7Yhz
wzahwahwah;PYaY3opP9ieH
但不幸的是我收到了错误:
grep: wzahwahwah: No such file or directory
文件 Delete.txt 而非所需数据包含:
/home/working/File1.txt:Buttler;Nsadlkt+4S7Yhz
所以它远非我需要得到的东西。我注意到当我从 File1.txt
中删除时wzahwahwah;PYaY3opP9ieH
我没有错误,我想要的文件如下:
Buttler;Nsadlkt+4S7Yhz
为什么这不起作用?
答案 0 :(得分:4)
而不是cat
和后续grep
使用此grep
:
grep -Ff Diff.txt File1.txt
Buttler;Nsadlkt+4S7Yhz
wzahwahwah;PYaY3opP9ieH
答案 1 :(得分:2)
当你这样做时
variable=$(cat Diff.txt)
grep $variable Output1.txt > Delete.txt
变量扩展后,由于它没有引用,grep命令变为
grep Buttler wzahwahwah Output1.txt > Delete.txt
Grep仅使用 first 参数作为模式,所有后续args都是文件名。 Grep在Output1.txt中找到了“Buttler”,但没有找到名为“wzahwahwah”的文件