#!/bin/bash
while read file1 <&3; do
while read file2 ; do
if [ $file1 == $file2 ] ; then
$file1 >> /infanass/dev/admin/test/newlist.txt
fi
echo "$file1"
echo "$file2"
done 3</infanass/dev/admin/test/file2.txt
done 3</infanass/dev/admin/test/file1.txt
我想从 file1.txt 读取一行,然后循环遍历 file2.txt 并查看是否有匹配项,以及是否也将其写出一个新的文本文件。
我想我有一个无限循环..
答案1
更简单的方法怎么样?
while read line do
grep "^$line$" file2.txt >>matches.txt
done < file1.txt
解释:
这会逐行file1.txt
循环并用于grep
查找 中的确切行file2.txt
。grep
如果能够匹配该行,现在将再次输出该行file2.txt
,然后将其重定向(附加)到文件matches.txt
。
您的脚本停滞的原因是您的第二个循环正在等待输入stdin
:您忘记将其stdin
复制为文件描述符3
,就像对第一个循环所做的那样。在任何情况下,都不需要创建额外的文件描述符:您只需重定向,stdin
以便while
循环从文件而不是终端读取。
答案2
答案3
为什么不通过喂食来更简单地做到这一点文件1作为 grep 的搜索词并让它在其中搜索文件2?
$ grep -f file1 file2 > file3
请注意,在某些平台上,由于性能问题,您需要/想要 egrep 或 ggrep。