如何使用多个字段分隔符或多个awk来处理列

时间:2016-09-13 20:38:36

标签: bash shell awk sed gawk

我有一个标签分隔文件,如下所示

John  1,0   3,2   5,6
Mike  3,2    4,5   0,0
James 3,0    5,3   4,5

我想添加3个字段的所有第一个元素,并添加3个字段的第二个元素输出以下

John 9,8
Mike 9,7
James 12,8 

在awk中是否存在可以使用多个字段分隔符的解决方案?

3 个答案:

答案 0 :(得分:5)

您可以在awk中使用多个分隔符:

awk -F '[\t,]+' -v OFS='\t' '{print $1, ($2+$4+$6) "," ($3+$5+$7)}' file

John    9,8
Mike    7,7
James   12,8

答案 1 :(得分:1)

我不了解awk,但这是bash的一个(无聊的)解决方案:

while read -r name f1 f2 f3; do
    s1=$((${f1%,*}+${f2%,*}+${f3%,*}))
    s2=$((${f1#*,}+${f2#*,}+${f3#*,}))
    echo "$name $s1,$s2"
done < input.txt

答案 2 :(得分:1)

$ awk -F'[\t,]' '{delete s; for (i=2;i<=NF;i++) s[i%2]+=$i; print $1 "\t" s[0] "," s[1]}' file
John    9,8
Mike    7,7
James   12,8