linux - bash 命令变量内的变量

标签 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,并以我在这里阅读的不同方式更改 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/

相关文章:

linux - 如何将当前路径复制到剪贴板?

linux - shell脚本匹配来自另一个文本文件的数据

java - 如何使用 ScriptEngine 将 Javascript 的输出转换为 Java

java - 如何在不终止进程的情况下强制 Linux 进程(Java webstart App)停止锁定文件系统(CD-ROM)?

linux - 在 Linux 中拆分平面文件并添加分隔符

linux - 如何以最少的击键启动 Bash 脚本

linux - 如何通过在 Jenkins 中使用 bash 脚本读取 pid 文件来终止进程?

bash - 在 cmd 完成之前 tee 输出不会出现

objective-c - 从另一个应用程序接收文本

linux - 检查命令行参数是否存在