-3

次のようにして ff の結果を得る UNIX スクリプトを書きたいと思います。

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 に答える