在bash上的命令变量内变量

问题描述 投票:0回答:1

我正在尝试提取没有使用BASH在centos上更新的IP地址的参考号,我有一个没有更新地址的CSV(IPs_withoutrefn.csv),我提取第二列,然后我们将这个值与另一个CSV进行比较( IP-references.csv)提取引用号。

为此,我试图以这种方式做一个变量,但输出总是空的,如果我在shell上尝试这个命令而不使用它正常工作的变量。

REFNO=$(grep "$IP" ../IP-references.csv | awk 'BEGIN{FS=OFS=";"}{sub(/\r$/,"");print $2"\r"}')

我已经尝试在函数中转换这个grep,并以不同的方式更改grep中的“$ IP”,如我所读的那样(“^ $ IP;”或“$ IP;”或$ {IP} .. 。)但结果总是一样的。

这是我正在使用的完整代码。

while IFS=";" read -r col1 col2

do

  #IP to variable#

        IP=$col2

        echo "$IP"

  #We search the IP and we extract the REFNO##

        REFNO=$(grep "$IP" ../IP-references.csv | awk 'BEGIN{FS=OFS=";"}{sub(/\r$/,"");print $2"\r"}')

        echo "$REFNO"

        echo "$IP"

done < "../IPs_withoutrefn.csv"

我希望它明白到足以理解,如果没有,请现在让我。

IPs_withoutrefn.csv示例:

  • ;1.1.1.1
  • ;
  • ;1.1.1.2

IP-references.csv示例

Client1; 89345013745; model; status; node1; sect1; node2; sect2 ;; 1.1.1.1; 1.1.1.1 ;;; datexpiration;

Client2; 89345013746; model; status; node1; sect1; node2; sect2 ;; 1.1.1.2; 1.1.1.2 ;;; datexpiration;

Client3; 89345013747; model; status; node1; sect1; node2; sect2 ;; 1.1.1.3; 1.1.1.3 ;;; datexpiration;

谢谢。

linux bash scripting sh
1个回答
0
投票

cut -d ";" -f 2 IPs_withoutrefn.csv | xargs -I {} grep {} IP-references.csv

这将打印IP引用中与第一个文件中的IP地址匹配的所有行。

您可以通过将| cut -d ";" -f 1,11添加到格式列表中来进一步改善输出

cut -d ";" -f 2 IPs_withoutrefn.csv  | xargs -I {} grep {} IP-references.csv | cut -d ";" -f 1,11

Client1; 1.1.1.1

CUSTOMER2; 1.1.1.2

-d用于分隔符,-f用于提交的数字

© www.soinside.com 2019 - 2024. All rights reserved.