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,ExchangeTerminal=1,E1PhysPathTerm=PPS1 ;pmEs ;0
2015-12-21 09:30:00;ManagedElement=1,Equipment=1,Subrack=1,Slot=27,PlugInUnit=1,ExchangeTerminal=1,E1PhysPathTerm=PPS1 ;pmSes ;0
2015-12-21 19:30:00;ManagedElement=1,Equipment=1,Subrack=1,Slot=27,PlugInUnit=1,ExchangeTerminal=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桁の数字とダッシュを見つけ、「年 - 」を見つけます。 - だから、年の変更について心配する必要はありません。
- しかし、まだ正規表現に慣れておらず、正規表現を使用する必要があるときに情報がない場合は、入力するのが少し複雑になり、覚えやすくなります。