我是Bash的新手。我有一个包含四列的CSV文件,值以逗号分隔:
jack,england,498,a
roy,wales,344,b
ben,ireland,679,a
ron,scotland,895,a
emma,england,344,a
jason,scotland,566,a
ketty,wales,433,b
我的输出应该是这样的:
england,842
ireland,679
scotland,1461
wales,777
城市名称必须按字母顺序排序,输出应仅在终端上打印。
这是我的代码:
#! /bin/awk -f
awk '{a[$1" "$2]+=$3}END{for (i in a){print i,a[i]}}' file.csv | sort -k2
当我使用awk -f file.awk
运行此代码时,它会给我一个语法错误。我已经阅读了很多关于这个问题的答案,但没有人帮助我。
invalid char in expression '''
在awk
之后的语法错误。
答案 0 :(得分:3)
您的脚本是一个调用awk而不是awk脚本的shell脚本。所以它完全正确,除了#!/bin/awk -f
。
使用#!/bin/sh
shebang,或将其修复为纯awk代码。
后者可能看起来像:
#!/usr/bin/env gawk -f
BEGIN {
# gawk extension: iterate over for loop in sort order (so we don't need to pipe to sort)
PROCINFO["sorted_in"]="@ind_str_asc"
# split on commas
FS=OFS=","
}
{
a[$2]+=$3
}
END {
for (i in a) {
print i, a[i]
}
}
答案 1 :(得分:2)
简称GNU datamash 解决方案:
datamash -st, -g 2 sum 3 < file.csv
输出:
england,842
ireland,679
scotland,1461
wales,777