使用awk解析文件中的字符串

时间:2017-04-30 18:51:33

标签: arrays unix awk

我还在学习Unix,而且我在理解以下代码行时遇到了问题。

echo "$lines" | awk '{split($0,a,":"); print a[3],a[2],a[1]}'

我不明白上面代码中的数组a发生了什么。它是在声明数组并将其设置为等于它解析的字符串吗?如果它正在声明数组a,那么为什么我不能在代码中打印出结果呢?

echo "${a[1]}"

上面的行打印一个空行,而不是在解析字符串时存储在数组a中的内容。我知道字符串中总有一些东西需要解析,当我调用数组时[1]我知道我在范围内。我只是没有看到/理解数组中发生的事情,这使我无法在代码中将其打印出来。

1 个答案:

答案 0 :(得分:1)

您的代码正在为每行输入打印一行。如果你没有得到输出,我的第一个猜测是,你没有输入。

给出输入:

lines="ab:cd:ef
ij:kl:m"

输出是:

ef cd ab
m kl ij

awk正在为每行输入执行命令(这是单引号之间的所有内容)。首先将每个$0的输入行:拆分为数组a,然后以相反的顺序打印前三个元素。

如果你试图访问shell中的数组元素,echo建议什么,那么你来不及了。该数组存在于awk中,并在awk完成时消失。