繁体   English   中英

使用awk从文件中提取信息,然后使用bash将其存储到变量中

[英]extracting information from a file using awk and storing it into a variable with bash

我有一个具有以下内容的配置文件:

ip address file_location
ip address file_location
.
.
.
.

我希望我的脚本test.sh从该文件读取IP地址和文件位置:这是我的代码:

while read line ; do
ip=`echo $line| awk '{print $1}'`
done <test.conf

现在,当我输入echo $ ip(只是看它是否有效)时,它给了我空白。

这可以是创建bash数组的一种方法:

$ declare -A mylist
$ i=1
$ while read line; do mylist[$i]=$(echo $line | awk '{print $1}'); ((i++)); done < test.conf

然后,您可以通过以下方式访问值:

$ for i in "${mylist[@]}"; do echo "$i"; done
ip1
ip2
ip3

或者,通过Jonathan Leffer的非常有趣的方法 ,您可以使用以下命令填充数组:

mylist=( $(awk '{print $1}' test.conf) )

它将存储如下数据:

mylist=(ip1 ip2 ip3 ...)

要将文件读入变量,甚至不需要走出bash进入awk

while read -r v_ip _ v_test_location; do
  printf "%s %s\n" "$v_ip" "$v_test_location";
done < test.conf

您的分配是在while循环的内部外壳中执行的,因此它对外部的ip变量没有影响。 考虑改为这样做:

ip=$(awk '/IMPORTANT_LINE_REGEXP/ {print $1}' test.conf)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM