grep里面的bash脚本找不到项目

时间:2014-10-16 16:03:53

标签: bash csv

我有一个脚本,它检查一个文件中的一个键与另一个文件中的一个键,以查看它是否存在。但是在脚本中,grep永远不会返回任何已找到但在命令行上的内容。

#!/bin/bash
# First arg is the csv file of repo keys separated by line and in
# this manner 'customername,REPOKEY'
# Second arg is the log file to search through

log_file=$2
csv_file=$1
while read line;
do 
    customer=`echo "$line" | cut -d ',' -f 1`
    repo_key=`echo "$line" | cut -d ',' -f 2`
    if [ `grep "$repo_key" $log_file` ]; then
        echo "1"
    else
        echo "0"
    fi
done < $csv_file

CSV文件的格式如下:

customername,REPOKEY

,日志文件如下:

REPOKEY

REPOKEY

REPOKEY

我通过./script csvfile.csv logfile.txt

来调用脚本

2 个答案:

答案 0 :(得分:2)

而不是检查grep命令的输出使用grep -q来检查其返回状态:

if grep -q "$repo_key" "$log_file"; then
    echo "1"
else
    echo "0"
fi

此外,您的脚本可以简化为:

log_file=$2
csv_file=$1
while IFS=, read -r customer repo_key; do
    if grep -q "$repo_key" "$log_file"; then
        echo "1"
    else
        echo "0"
    fi
done < "$csv_file"

答案 1 :(得分:0)

使用grep命令的退出状态来打印10

repo_key=`echo "$line" | cut -d ',' -f 2`

grep -q "$repo_key" $log_file

if [ $? -eq 1  ]; then
        echo "1"
    else
        echo "0"
    fi

-q抑制输出,以便不打印输出

$?grep命令1在成功匹配时的退出状态,0在不成功匹配时的退出状态

你可以有一个更简单的版本

grep -q "$repo_key" $log_file
echo $?

将产生相同的输出