bash上的命令变量内的变量

时间:2018-08-30 10:12:57

标签: linux bash scripting sh

我正在尝试为未在centos上使用BASH更新的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转换为函数,并以我在此处阅读的不同方式(例如“ ^ $ 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;模型编号;状态; node1; sect1; node2; sect2 ;; 1.1.1.1; 1.1.1.1 ;;; datexpiration;

     

Client2; 89345013746;型号;状态; node1; sect1; node2; sect2 ;; 1.1.1.2; 1.1.1.2 ;;; datexpiration;

     

Client3; 89345013747;型号;状态; node1; sect1; node2; sect2 ;; 1.1.1.3; 1.1.1.3 ;;; datexpiration;

谢谢。

1 个答案:

答案 0 :(得分: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

     

Client2; 1.1.1.2

-d表示分隔符,-f表示归档编号