次の形式のかなり大きなテキストファイル(数千行)があります。
123.123 5
123.123 91
156.456 45
233.185 85
233.185 4
257.448 1
455.456 60
455.456 2
最初の列はソート座標(xy)、2番目の列はラベル(0〜1000)です。座標123.123にはラベル5とラベル91があり、座標156.456にはラベル45のみがあることがわかります。
すべての座標(繰り返しなし)と異なるラベル(このラベルは複数回表示)を含む出力として異なるファイルが必要です。この例の出力は次のようになります。
123.123 5 91
156.456 45
233.185 85 4
257.448 1
455.456 60 2
私の考えは、重複した文字列(座標、最初の列のみ)を削除し、ラベルをそのままにしてから行などを再編成することですが、どのコマンドを使用するかをやめます。
別のオプションはデータベースを使用することです。
答え1
awkのための仕事だと思います。
awk '{ c[$1]=c[$1] "\t" $2 ; } END { for ( c2 in c ) printf c2 c[c2] "\n" ; } '
どこ
c[$1]=c[$1] "\t" $
2はラベルを保存し、END
句はファイルの末尾で実行されます。for ( c2 in c ) printf c2 c[c2] "\n" ;
座標を繰り返してラベルを印刷します。
答え2
perl -p0e 'while(s/^(\S+)( .*)(\n\1)/\1\2/m){}'
基本的なアイデアは次のとおりです。
-p0
ファイルをメモリにロードし、最後に印刷します。-e
ロードされたファイルで次の引数を実行する- 可能であれば、次のもの
<word> <line>\n<word>
と交換してください。<word> <line>