如何重新排列文本文件输出结果

时间:2013-05-19 00:52:46

标签: bash shell unix text

我想编写一个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

2 个答案:

答案 0 :(得分:3)

派对有点晚了,但我差点就这样做了几乎:

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

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

答案 1 :(得分:2)

您可以使用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
}