Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如果文件的第1列中存在变量,请将单独的变量设置为第2列中的相应值_Bash_If Statement_Grep - Fatal编程技术网

Bash 如果文件的第1列中存在变量,请将单独的变量设置为第2列中的相应值

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语

我正在编写一个脚本来运行输入的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语句,它将标识$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