如何将数组实现为AWK表达式?

时间:2013-03-11 06:38:34

标签: linux arrays bash awk multiple-columns

我正在编写一个脚本,并且我已经分隔了这样的文件。

1|Anderson|399.00|123                                  
2|Smith|29.99|234                                  
3|Smith|98.00|345                                   
4|Smith|29.98|456                                   
5|Edwards|399.00|567  
6|Kreitzer|234.56|456

这是一个awk语句,它将获取包含“Smith”的行的第一列中的所有值。

echo $(awk -F '|' 'BEGIN {count=0;} $2=="Smith" {count++; print $1}' customer)

输出结果为:

2 3 4

我怎么能这样做,所以我也将值作为awk增量输入到数组中。我试过这个:

echo $(awk -F '|' 'BEGIN {count=0;} $2=="Smith" {count++; arr[count]=$1; print $1}' customer)

编辑:稍后进入脚本,当我输入

echo ${array[1]} 
没有输出。

3 个答案:

答案 0 :(得分:1)

你的代码似乎是对的!也许,我可能没有正确地回答你的问题?

我略微增强了你的代码,以便在执行结束时打印存储在数组中的值。此外,在打印值之前有一个print语句。

echo $(awk -F '|' 'BEGIN {count=0;} $2=="Smith" {count++; arr[count]=$1; print $1} END { print "Printing the inputs"; for (i in arr) print  arr[i] }' customer)
2 3 4 Printing the inputs 2 3 4

此外,请查看this site以获取更多示例。

答案 1 :(得分:0)

你的问题不是很清楚。寻找这样的东西?

awk -F "|" '$2=="Smith" {arr[count++]=$1}
            END {n=length(arr); for (i=0;i<n;i++) print (i+1), arr[i]}' in.file

输出

1 2
2 3
3 4

答案 2 :(得分:0)

找到一个简单的解决方案。将awk的输出设置为变量。然后将变量转换为数组。

list=$(awk -F '|' 'BEGIN {count=0;} $2=="Smith" {count++; print $1}' customer)

array=($list)

打字:

echo ${array[1]}

将为您提供数组中的第二个条目