我正在编写一个脚本,并且我已经分隔了这样的文件。
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]}
没有输出。
答案 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]}
将为您提供数组中的第二个条目