2

次の形式の大きなテキスト ファイルがあります。

80708730272

598305807640 45097682220

598305807660 87992655320

598305807890

598305808720

598305809030

598305809280

598305809620 564999067

598305809980

33723830870

ご覧のとおり、数字の行があり、場合によっては 2 番目の行があります。テキスト ファイル (solaris の場合) では、2 行目が最初の行の下にあります。なぜ彼らが並んでいるのかわからない。2行目に数字があるときは必ずコマを入れたいです。

598305809620 564999067

次のようにします。

598305809620、564999067

そして、セミコロン「;」も入れることができれば 各行の終わりには完璧です。助けていただけますか?何を使用でき、基本的にどのようにそれを行うことができますか?

4

2 に答える 2

1

私の最初の本能はsedむしろawk. どちらも優れたツールです。
ただし、単一の正規表現 (「正規表現」) ですべてを行う簡単な方法を見つけることができませんでした。間違いなく他の誰かがそうするでしょう。
sed -i.bak -r "s/([0-9]+)(\s+[0-9]+)/\1,\2/g" filename.txt
sed -i -r "s/[0-9]+$/&;/g" filename.txt.bak
最初の行は、数字の 2 つのグループを含む行を処理し、追加の「.bak」ファイル拡張子を付けて新しいファイルに書き出します。これは、妄想的 (別名「グッド プラクティス」) であり、次の場合に元のファイルを上書きする危険を冒さないためです。あなたはミスを犯しました。
2 行目では、少なくとも 1 つの数字を含むすべての行にセミコロンを追加します。たとえば、空白行をスキップします。その場で .bak ファイルを上書きします。
結果が満足できるものであることを確認したら、元のファイルをこのファイルに置き換えます。

ここで何が起こっているのかを正確に説明したい場合はお知らせください。

于 2013-08-11T18:04:47.890 に答える
0

この状況では、awk はあなたの味方です。これを試してみてください:

awk '{if (NF==2) printf "%s, %s;\n\n", $1, $2; else if (NF==1) printf "%s;\n\n", $1}' big_text.txt | cat > txt_file.txt

これにより、次の出力が得られるはずです。

80708730272;

598305807640, 45097682220;

598305807660, 87992655320;

598305807890;

598305808720;

598305809030;

598305809280;

598305809620, 564999067;

598305809980;

33723830870;

それがうまくいくことを願っています!

于 2013-08-11T16:59:16.637 に答える