Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用awk解析文件中的字符串_Arrays_Unix_Awk - Fatal编程技术网

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

Arrays 使用awk解析文件中的字符串,arrays,unix,awk,Arrays,Unix,Awk,我仍在学习Unix,在理解下面这行代码时遇到了一些问题 echo "$lines" | awk '{split($0,a,":"); print a[3],a[2],a[1]}' 我不明白上面代码行中的数组a发生了什么。它是否声明数组并将其设置为与正在解析的字符串相等?如果它声明了数组a,那么,为什么我以后不能在代码中打印结果呢 echo "${a[1]}" 上面的行打印一个空行,而不是解析字符串时存储在数组a中的内容。我知道字符串中总有一些东西需要解析,当我调用数组a[1]时,我知道我在范

我仍在学习Unix,在理解下面这行代码时遇到了一些问题

echo "$lines" | awk '{split($0,a,":"); print a[3],a[2],a[1]}'
我不明白上面代码行中的数组a发生了什么。它是否声明数组并将其设置为与正在解析的字符串相等?如果它声明了数组a,那么,为什么我以后不能在代码中打印结果呢

echo "${a[1]}"

上面的行打印一个空行,而不是解析字符串时存储在数组a中的内容。我知道字符串中总有一些东西需要解析,当我调用数组a[1]时,我知道我在范围内。我只是看不到/不明白数组a发生了什么,它阻止我以后在代码中打印出来。

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

如果输入:

lines="ab:cd:ef
ij:kl:m"
输出为:

ef cd ab
m kl ij
awk
正在为每一行输入执行命令(即单引号之间的所有内容)。首先将每个
处的输入行
$0
拆分为数组
a
,然后按相反顺序打印前三个元素


如果您试图访问shell中的数组元素,
echo
建议,那么您就太晚了。数组存在于awk中,并且在awk完成时消失。

只有在
awk
脚本中才能使用
awk
数组
a
;它不是外壳的一部分。这就是为什么以后不能在
echo
命令中访问它的原因。那么如何将数组保存到可以使用的变量中?是这样的:VAR=($(echo“$lines”| awk'{split($0,a,“:”))是的(现在您的注释已更新为包含一些代码)。您可能希望使用:
a=($(echo“$lines”| awk'{…}'))
执行shell数组赋值。但是,这会将所有行处理为一个shell数组。你得决定这是否合适。它还将丢失数组元素中的所有空格(因此,如果其中一行包含
aabb:cc dd:ee ff gg
,那么您将从3个Awk数组元素中获得7个shell数组元素)。你必须判断这是否是你的问题。