Bash 如果文件的第1列中存在变量,请将单独的变量设置为第2列中的相应值
我正在编写一个脚本来运行输入的grep,创建一个文件列表,并在一个单独的目录中grep该文件列表,然后打印结果Bash 如果文件的第1列中存在变量,请将单独的变量设置为第2列中的相应值,bash,if-statement,grep,Bash,If Statement,Grep,我正在编写一个脚本来运行输入的grep,创建一个文件列表,并在一个单独的目录中grep该文件列表,然后打印结果 echo "enter term" read term grep -rc "$term" /prod/directory1 | grep -v ":0" | sed -s 's%:[0-9]*%%' > file_list.txt grep -rl --file=file_list.txt /tmp/directory2 > results.txt 但是我想添加一个if语
echo "enter term"
read term
grep -rc "$term" /prod/directory1 | grep -v ":0" | sed -s 's%:[0-9]*%%' > file_list.txt
grep -rl --file=file_list.txt /tmp/directory2 > results.txt
但是我想添加一个if语句,它将标识$term是否等于另一个文件第一列中的值,然后将一个新变量设置为该文件第2列中的相应值
echo "enter term"
read term
for i in products.txt; do
if [[ $term = $i ]]; then
var2 = $2
echo "product code set to: "$var2
else
var2 = 0
echo "product code set to 0."
fi
done
grep -rc "$term" /prod/directory1 | grep -v ":0" | sed -s 's%:[0-9]*%%' > file_list.txt
if [[ ! $var2 = 0 ]] ; then
grep -rc "var2" /prod/directory1 | grep -v ":0" | sed -s 's%:[0-9]*%%' >> file_list.txt
sed -s 's%.properties%%' file_list.txt | sort -u > file_list.txt
grep -rl --file=file_list.txt /tmp/directory2 > results.txt
新的grep将返回最后带有.properties的结果,因此我将它们以及所有重复文件从列表中删除。下面是products.txt的示例
Product_1 productCode_1
Product_2 productCode_2
Product_3 productCode_3
我希望脚本确定$term是否在该文件的第一列中,然后将$var2设置为第二列中相应的productCode。我相信,一旦设置了该变量,其他一切都会很好地工作,但现在它在以下方面失败:
for i in products.txt; do
if [[$term = $i ]]; then
var2 = $2
提前感谢您的帮助,我对bash脚本编写还比较陌生,因此我为自己的无能提前道歉。试试:
var2=$(awk -v term="Product_2" '$1==term{print $2}' products.txt)
如果需要,将Product_2更改为从另一个变量读取。我将其编辑为包含空格,但这并没有解决问题。@anishane我尝试了以下方法:在products.txt中为i;如果[[$term=$i]],则执行该操作;然后设置var2=$awk-v term=$term'$1==term{print$2}'products.txt;echo var2设置为$var2;fi已完成,但回显未返回值。问题已解决。。我在var、=、和$function之间有一个空格。。这很有效,谢谢你的帮助@anishane