3

これからWindowsで非常に大きなログファイルを変更するにはどうすればよいですか:

   3334-444-(4)なんでも2
   4444-444-(4)なんでも2
   4744-454-(4)なんでも2
   48444 44-(4) なんでも2
   8444-444-(4)なんでも2
   4464-(444)-2 なんでも2

これに:

33344444 なんでも2
44444444 なんでも2
47444544 なんでも2
48444444 なんでも2
84444444 なんでも2
44644442 なんでも2

数字以外の各行の 18 番目の位置まですべてを削除し、2 番目の列の位置を保持しますか?

\\編集:問題は、1 桁目から 17 桁目までの数字の間にスペースが入る可能性があることです。これがうまくいくと私が推測するロジックです:
1. pos から。1 から 17 まで '(', ')', '-' を ' ' [スペース] に置き換え
ます。1 から 17 まで ' ' [スペース] を '' [なし] に置き換え、カウントの変更
3. 位置から。1 から 17 は、前のステップからの各変更に従って、数字の後にスペースを追加します

4

6 に答える 6

1

cygwinをインストールすれば、commandline-tools の機能を使用できます。

$ sed 's/[-)(]//g' input
33344444  anything   anything2
44444444  anything   anything2
47444544  anything   anything2
48444444  anything   anything2
84444444  anything   anything2
44644442  anything   anything2

アップデート

複雑なタスクをより小さな部分に分割する方が簡単な場合があります。

入力が次のようになっていると仮定します (定規を追加)

         1         2         3         4         5
12345678901234567890123456789012345678901234567890
   3334-444-(4)  anything   anything2
   4444-444-(4)  anything   anything2
   4744-454-(4)  anything   anything2
   48444 44-(4)  anything   anything2
   8444-444-(4)  anything   anything2
   4464-(444)-2  anything   anything2

ステップ 1ではcut、最初の 17 文字を切り取り、不要な文字を削除して tmp ファイルに保存します。

ステップ 2は、文字 18 を行末まで切り取り、tmp ファイルに保存することです。

ステップ 3は、tmp ファイルを 1 つのファイルに結合することです。

このようなもの:

$ cut -c1-17 input | sed 's/[-)( ]*//g' > c1

$ cut -c18- input > c2

$ paste c1 c2

これがあなたの美的感覚に合わない場合は、 を使用してすべてを一度に行うことができますawk。次の行を「col.awk」というファイルに入れるか、気に入った場合はより良い名前を選択してください。

{
  x = substr($0, 0, 17)
  y = substr($0, 18, length($0))
  gsub(/[-)( ]*/, "", x)
}
{ printf "%-18s%s\n", x, y }

次に、次のように呼び出します。

$ awk -f col.awk input

出力(再び定規を使用):

         1         2         3         4         5
12345678901234567890123456789012345678901234567890
33344444         anything   anything2
44444444         anything   anything2
47444544         anything   anything2
48444444         anything   anything2
84444444         anything   anything2
44644442         anything   anything2

cygwin はすべての行末を UNIX スタイルにすることを好むため、入力を Windows スタイルから UNIX スタイルに変換する必要がある場合があることに注意してください。ここで役立つツールの 1 つはdos2unixor fromdos(ここでは Google があなたの友達です) です。

于 2013-04-12T12:34:49.283 に答える
0

sed の使用:

sed -E ':a;s/^([0-9]*)([( ]|-\(?|\)-?)([0-9]+)\)?/\1\3/;ta;s/[ \t]+/         /;' file
于 2013-04-12T14:17:25.740 に答える
0

Ultra Edit を試してみてください。列モードで選択できるエディターなので、最初の 18 文字を選択してその方法で置換できる場合があります。

頭に浮かぶ唯一の他のことは、マクロ機能を備えたエディターを使用してそれを行うことです.

または、簡単で汚いプログラムを作成します。

于 2013-04-12T12:32:32.320 に答える
0

以下の正規表現を使用し、"" (空の文字列) に置き換えます

[-\(\)]

それが役に立てば幸い。

于 2013-04-12T12:33:29.687 に答える
0

notepad++をダウンロードします。ドキュメントを開き、CTRL+h を押して検索と置換を行います。

「検索対象」ボックスで次の正規表現を使用します。

^([0-9]+)\-?\(?([0-9]+)\)?\-?\(?([0-9]+)\)?

そしてこれは「置換」ボックスにあります:

\1\2\3

検索モードで「正規表現」を選択し、すべて置換します。

于 2013-04-12T12:47:17.630 に答える