我遇到了一些自己无法解决的奇怪问题。我有两个文件,内容如下:
文件1.txt
Butterscotch;lkt+4S7Yhzf/g
Sox;WrWMzN6HD
Table;K4yPIK+SFfTFs
tram;YaY3opP9ie
number;e/WwiF5aihUY
Buttler;Nsadlkt+4S7Yhz
wzahwahwah;PYaY3opP9ieH
文件2.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
新文件包含如下条目:
输出1.txt
Butterscotch
Sox
Table
tram
number
Buttler
wzahwahwah
输出2.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
因此,对于这个例子,我应该得到这样的东西:
删除.txt
Buttler;Nsadlkt+4S7Yhz
wzahwahwah;PYaY3opP9ieH
但不幸的是,我得到了一个错误:
grep: wzahwahwah: No such file or directory
文件删除.txt而不是所需的数据包含:
/home/working/File1.txt:Buttler;Nsadlkt+4S7Yhz
所以这远远不是我需要的。我注意到,当我从File1.txt中删除时
wzahwahwah;PYaY3opP9ieH
我没有得到错误,我想要的文件看起来像:
Buttler;Nsadlkt+4S7Yhz
有什么想法为什么不起作用吗?
不要使用cat
和后续grep
,而是使用此grep
:
grep -Ff Diff.txt File1.txt
Buttler;Nsadlkt+4S7Yhz
wzahwahwah;PYaY3opP9ieH
当您执行此时
variable=$(cat Diff.txt)
grep $variable Output1.txt > Delete.txt
变量展开后,由于它未被引用,grep命令将变为
grep Buttler wzahwahwah Output1.txt > Delete.txt
Grep只使用第一个参数作为模式,后面的所有参数都是文件名。Grep在Output1.txt中找到了"Buttler",但没有找到名为"wzahwahwah"的文件