csvファイルの行を列に変換するには? [閉鎖]

csvファイルの行を列に変換するには? [閉鎖]
2015-12-2119:30:00;ManagedElement=1,Equipment=1,Subrack=1

;pmEs
;0

この結果が必要です。

2015-12-2119:30:00;ManagedElement=1,Equipment=1,Subrack=1;pmEs;0

コメントの追加データ:

2015-12-21 19:30:00;ManagedElement=1,Equipment=1,Subrack=1,Slot=27,PlugInUnit=1,ExchangeTer‌​minal=1,E1PhysPathTerm=PPS1 ;pmEs ;0
2015-12-21 09:30:00;ManagedElement=1,Equipment=1,Subrack=1,Slot=27,PlugInUnit=1,ExchangeTer‌​minal=1,E1PhysPathTerm=PPS1 ;pmSes ;0
2015-12-21 19:30:00;ManagedElement=1,Equipment=1,Subrack=1,Slot=27,PlugInUnit=1,ExchangeTer‌​minal=1,E1PhysPathTerm=PPS1 ;pmUas ;900

ベストアンサー1

あなたの例がそれぞれ...で始まる一種のログの多くのレコードの1つであるように見える場合は、次の2015-ような迅速なアプローチを試すことができます。

tr -d '\n' < input.csv | sed 's/2015-/\n2015-/g' > output.csv

説明する

  • これには、input.csv必要な内容が常に2015-次に始まる例に似た行が含まれています。
  • tr -d '\n'新しい行を削除します。したがって、すべての新しい行を一時的に削除します。
  • < input.csvプログラムが読みやすいinput.csvように、標準入力に内容を入力します。tr
  • sed次に検索を使用し2015-、古い新しい行に置き換えて目的の2015-行を取得します。そうしないと、入力がログから出てくるように見え、ログに複数のエントリ/レコードがあることがよくあります。これtr -d '\n'により、他のすべてのタイムスタンプ項目が1つの巨大な連続線にマージされ、個々のタイムスタンプ項目を識別できなくなります。 。したがって、これを使用してsed認識されたレコード区切り文字を検索2015-し、その前に新しい行を追加して、最終出力に1行に1つのレコードがあることを確認します。
  • > output.csv結果を次に保存output.csv
  • もちろん、2015-記録が年末に始まらないと動作しません。まもなく終了するので、2016-来年を2016年に修正する必要があります。

より進化したバージョン

または:

tr -d '\n' < input.csv | sed 's/\([[:digit:]]\{4\}\)-/\n\1-/g' > output.csv
  • 同じように機能しますが、デフォルトのsed正規表現を使用して4桁の数字とダッシュを見つけ、「年 - 」を見つけます。
  • だから、年の変更について心配する必要はありません。
  • しかし、まだ正規表現に慣れておらず、正規表現を使用する必要があるときに情報がない場合は、入力するのが少し複雑になり、覚えやすくなります。

おすすめ記事