使用Bash For循环搜索文件中的唯一行

使用Bash For循环搜索文件中的唯一行,bash,grep,uniq,Bash,Grep,Uniq,我有一个带有文件名列表的文件sortedfile.txt。我正在搜索另一个文件,ngfilelist.txt,其中包含sortedfile.txt中所有重复文件的文件列表 我正在使用这个命令 for X in `uniq -d ~/Desktop/sortedfiles.txt`; do grep "$X" ~/Desktop/ngfilelist.txt; done 我应该纠正什么?我会这样做: cat sortedfiles.txt | xargs -n1 -i{} grep '^{}$

我有一个带有文件名列表的文件
sortedfile.txt
。我正在搜索另一个文件,
ngfilelist.txt
,其中包含
sortedfile.txt
中所有重复文件的文件列表

我正在使用这个命令

 for X in `uniq -d ~/Desktop/sortedfiles.txt`; do grep "$X" ~/Desktop/ngfilelist.txt; done

我应该纠正什么?

我会这样做:

cat sortedfiles.txt | xargs -n1 -i{} grep '^{}$' ngfilelist.txt
与使用
for
循环不同,我发现使用
xargs
更容易对
sortedfiles.txt
中的每一行运行
grep
。输出是两个文件中的文件名列表


请注意,
^
$
仅用于匹配完整的文件名,因为部分匹配可能不会被视为解决问题的有效结果。

我会这样做:

cat sortedfiles.txt | xargs -n1 -i{} grep '^{}$' ngfilelist.txt
与使用
for
循环不同,我发现使用
xargs
更容易对
sortedfiles.txt
中的每一行运行
grep
。输出是两个文件中的文件名列表


请注意,
^
$
仅用于匹配完整的文件名,因为部分匹配可能不会被视为问题的有效结果。

这可能适用于您:

 awk 'FNR==NR{f[$1]++;next}$1 in f && f[$1]>1{print}' sortedfiles.txt ngfilelist.txt

这可能适合您:

 awk 'FNR==NR{f[$1]++;next}$1 in f && f[$1]>1{print}' sortedfiles.txt ngfilelist.txt

我相信对于我的问题,
cat
应该是
uniq-d
,但这看起来是一个解决方案。我已经确定是Cygwin,而不是我的命令,工作不正常。我相信对于我的问题,
cat
应该是
uniq-d
,但这看起来是一个解决方案。我已经确定是Cygwin,而不是我的命令,工作不正常。