使用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,而不是我的命令,工作不正常。