我有一个脚本,它检查一个文件中的一个键与另一个文件中的一个键,以查看它是否存在。但是在脚本中,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
答案 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
命令的退出状态来打印1
或0
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 $?
将产生相同的输出