0

テキストファイルの入力

A | 1 | def | 1432
A | 1 | ffr | 1234
A | 1 | dfs | 3241
A | 2 | asf | 2213

必要な出力

A | 1 | def 1432,ffr 1234,dfs 3241
A | 2 | asf 2213

1行の2列目に関連する値をマージする

4

3 に答える 3

2

そしてここにPerlの試みがあります:

perl -F'\s+\|\s+' -alne '
$a{$F[1]} .= "$F[2] $F[3],";
END {
  $_ = "A | $_ | $a{$_}", s/,$//, print for sort keys %a;
}' FILE
于 2012-04-11T12:14:34.343 に答える
2

あなたの問題は明確に特定されていませんが、解決に向けたステップは次のとおりです。

awk -F\| '{  a[$1 "|" $2] = a[$1 "|" $2 ] "," $3 $4 }
     END { for( x in a ) print x a[x]}' input |
     sed 's/,/|/'  # Trim leading comma

これにより、出力の3番目の列に誤って挿入された先頭のコンマではなく、最初の2列のいずれかの最初のコンマが誤って削除され、2番目だけでなく最初の2つの列の両方でソートされます。また、出力の順序は入力とは異なります。おそらく他の問題がありますが、これは役立つかもしれません。

于 2012-04-11T12:05:41.383 に答える
0
awk '
    BEGIN { FS = " \\| "; OFS = SUBSEP = " | " }
    {
        val[$1,$2] = val[$1,$2] sep[$1,$2] $3 " " $4
        sep[$1,$2] = ","
    }
    END { for (key in val) print key, val[key] }
'

これにより、入力の順序が保持されない可能性があります。また、1列目と2列目の両方をキーとして使用しますが、1列目は変わらないとおっしゃるように関係ありません。

于 2012-04-11T13:06:05.870 に答える