我正在尝试提取未在 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,并以我在这里阅读的不同方式更改 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;modelno;status;node1;sect1;node2;sect2;;1.1.1.1;1.1.1.1;;;datexpiration;
Client2;89345013746;modelno;status;node1;sect1;node2;sect2;;1.1.1.2;1.1.1.2;;;datexpiration;
Client3;89345013747;modelno;status;node1;sect1;node2;sect2;;1.1.1.3;1.1.1.3;;;datexpiration;
谢谢。
最佳答案
cut -d ";"-f 2 IPs_withoutrefn.csv | xargs -I {} grep {} IP-references.csv
这将打印 IP 引用中与第一个文件中的 IP 地址匹配的所有行。
您可以通过添加 | 进一步改进输出切-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 为字段数
关于linux - bash 命令变量内的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52094493/