-3

我想编写一个 unix 脚本,执行以下操作以获得 ff 结果:

textfile1 包含以下文本:

    keyval1,1
    keyval1,2
    keyval1,3 
    keyval1,4
    keyval2,1
    keyval2,2
    keyval3,1
    keyval4,1
    keyval4,3
    keyval4,4

预期结果:

    keyval1 (1,2,3,4)
    keyval2 (1,2)
    keyval2 (1)
    keyval4 (1,3,4)

谢谢你。

我是 unix 新手,这就是我迄今为止所做的。虽然它还没有工作:(

 #!/bin/ksh  
 f1 = 'cut -d "," -f 1 keyval.txt' 
 f2 = 'cut -d "," -f 2 keyval.txt' 
 while f1 <> f2 
 do 
 echo f1 "("f2")"   
 done   > output.txt
4

2 回答 2

3

您可以使用AWK轻而易举地做到这一点:

#!/usr/bin/awk -f
BEGIN {
    FS = ","
    closeBracket = ""
}

{
    if (key != $1)
    {
        key = $1
        printf "%s%s (%s", closeBracket, key, $2
    }
    else
    {
        printf ",%s", $2
    }

    closeBracket = ")\n"
}

END {
    printf "%s", closeBracket
}
于 2013-05-19T01:31:24.420 回答
3

派对有点晚了,但我把这个放在身边,几乎:

#!/usr/bin/perl
while (<>)
{
  /(.+),(.?+)\s*/;
  push @{$h{$1}}, $2;
}
print map {"$_ (" . join(',', @{$h{$_}}) . ")\n"} sort keys %h;

不是特别漂亮,但它完成了工作。

于 2013-05-19T22:25:23.683 回答