0

改行で区切られ、サーバーからそのままコピーされたデータがたくさんあります。\nただし、フィールドが必要なため、すべてをカンマに置き換えるだけではCSVに変換できません。この場合、9 つのフィールドがあります。このデータを変換するにはどうすればよいですか?
最後の要素には改行文字を保持する必要があるため、コンマは必要ないことに注意してください。

私は正規表現 foo が苦手ですが、必要なループがあるので、これをシェル スクリプトにする必要があると思いますか?

どんな助けでも大歓迎です。

サンプルデータ:

Name
Logon User
IP Address
Version
Last Login
Restart Required
Foo1
Foo2
Foo3
Jon Weinraub
jweinraub
10.18.66.10
3.1.1.1
2013-08-19 14:33:11
No
Bar1
Bar2
Bar3
Homer Simpson
....

したがって、本質的にはそうあるべきです

Name,Logon User, IP,...Foo3
Jon Weinraub,jweinraub,10.18.66.10,...Bar3
Homer Simpson,....
4

4 に答える 4

1

を使用してそれを行うための少し手の込んだ方法 (ただし、理解して変更するのは簡単です) awk:

makeCSV.awk次のスクリプトでファイルを作成します。

BEGIN {
  count = 0; 
}

{
  count++;
  if (count == 9)
  { 
    count = 0;
    printf "%s\n", $0;
  }
  else
  {
    printf "%s, ", $0;
  }
}

次に、コマンドラインからこれを実行できます

awk -f makeCSV.awk myInputFile > myOutputFile.csv
于 2013-08-19T19:51:10.737 に答える
1

素敵な awk バリアント:

awk 'ORS = NR%9 ? "," : "\n"'

ORS は出力レコード区切り文字です。9 行目以外のすべての行で "," に設定され、常に "," または "\n" のいずれかであるため、式は常に true と評価され、レコード (ORS が続く行) を出力するデフォルト アクションは次のようになります。入力の各行で実行されます。

于 2013-08-20T12:55:37.440 に答える
0

以前にもこの問題が発生したことがあり、間違っている可能性がありますが、行末に「\r\n」を追加して次のビットのデータを新しい行に配置することで問題を解決しました。たとえば、次のようなものがあります

NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,

最後のコンマを「\r\n」に置き換える必要があります。これがあなたが求めているものではない場合はお知らせください...

于 2013-08-19T19:36:04.927 に答える