确定 Awk 中的行

Determining What Line Does in Awk

我是 awk 的新手。我正在阅读一个简单的循环语句,其中通过使用 split() 命令我在循环开始之前定义了 'a' 数组,在循环的每次迭代中定义了 'b' 数组。

有人可以帮我解释下面的陈述吗?因为我知道 splits 和 for 循环在做什么,所以我把它放在了透视图中。

split(,a,":");
for(i=1,i<length(a),i++){
split(a[i],b," ")

#I don't know what the statement below this line does.
#It appears to be creating a multidimensional thing?


x[b[1]]=b[2]
x[b[1]]=b[2]

它不是在创建多维数组。

x 是一个数组。它将数组键 b[z] 的值赋给 b[z]。 z 是我刚刚在这里使用的正整数。

看起来像一维数组。假设您有一个文本文件,其中一行如下:

1|age 10:fname john:lname smith|12345
  • 假设管道符号的分隔符 |,您的 $2 将是 age 10:fname john:lname smith
  • 用冒号 : 拆分将得到 3 个项目:age 10fname johnlname smith
  • for 循环遍历这 3 个项目。它取第一项age 10
  • 被space分割了。 b[1] 现在是年龄,b[2] 现在是 10
  • 数组 x['age'] 设置为 10
  • 同理,x['lname']设置为smith,x['fname']设置为'john'