使用IF匹配文件中的字符串

时间:2014-10-30 15:12:57

标签: bash shell

我正在尝试查找与另一个文件匹配的文件的字符串并将它们收集到一个数组中。作为第一步,我试图找到两个文件的字符串匹配。我使用下面的代码,但奇怪的是我收到此消息grep: 3: No such file or directorygrep: 5: No such file or directory。我无法弄清楚这个因果关系。有人可以帮我找到根源吗?使用的Shell脚本:

#!/bin/bash
while
read LINE
do
if grep -q $LINE /tmp/UA_Automation/glhard; then
echo "$LINE"
echo "matched"
else
echo "$LINE"
echo "not_matching"
fi
done < /tmp/UA_Automation/UA_daily_listings_unique_count.csv|awk '{ print $1 }'

glhard&amp; UA_daily_listings_unique_count.csv是文件的名称。这两个文件的内容分别为:

glauto
gltyre
gldisc
glclothes    


glwheel 2
glgun 3
glauto 4
gldisc 4
glpants 6

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

LINE的值包含空格;你需要引用它,以便将整个值用作模式,而不仅仅是分词后的第一个单词。

if grep -q "$LINE" /tmp/UA_Automation/glhard; then

也就是说,我建议您查看diffcomm这样的逐行文件比较,而不是为每一行运行grep

答案 1 :(得分:1)

您正在将循环的输出传递给awk。你想走另一条路:

awk '{print $1}' /tmp/UA_Automation/UA_daily_listings_unique_count.csv | while read LINE
do
    if grep -q $LINE /tmp/UA_Automation/glhard; then
        echo "$LINE"
        echo "matched"
    else
        echo "$LINE"
        echo "not_matching"
    fi
done

虽然您也可以使用read分割线:

while read LINE NUMBER
do 
    ...
done < /tmp/UA_Automation/UA_daily_listings_unique_count.csv