从AWK到数组的数据

时间:2016-07-29 00:35:44

标签: bash unix awk

我一直在研究在unix中对输入txt文件进行排序,但遇到了一些我喜欢的建议。

Product,color,stock
apple,red,400
apple,green,400
apple,yellow,400
grape,purple,500
banana,yellow,120

说这是我的输入文件。它只是一个文本文件,但我想稍微整理一下我的信息。

我首先使用awk将我的产品分组在一起......

awk -F '[,]' 'NR >= 1 {b[$1];}

如果我将它打印出来,这将留下以下内容......

apple
grape
banana

但如果我想要包含其他信息,例如该行中列出的所有产品颜色,我会遇到问题。如果我想要那个' b'索引数据进入另一个数组我将如何做到这一点(因为我似乎无法从awk代码外部访问' b')?认为以下方法可行,但没有运气。

awk -F '[,]' 'NR >= 1 {b[$1];}END{for (i in b) productArray+=(b[i])}'

1 个答案:

答案 0 :(得分:0)

awk并没有真正拥有这样的嵌套列表。如果您希望数据进入不同的数组(数组j),那么您可以这样做:

cat test.txt |awk -F '[,]' 'NR > 1 { b[$1]=$2} END {for (x in b) { j[x]; print x}}'

如果您想将第二列折叠为基于第1列的唯一行,您可以执行以下操作:

$ cat test.txt |awk -F ',' 'NR > 1 { if ($1 in b) { b[$1] = b[$1] FS $2} else { b[$1]=$2}} END {for (x in b) { print x,": " b[x] }}' apple : red,green,yellow banana : yellow grape : purple