行から日付フィールドを抽出する

行から日付フィールドを抽出する

このようなファイルがあります。

Sampleoutput1[Fri Jun 10 06:11:59 2016]Local/ESSBASE0///139929633446208/Error(10
Sampleoutput1Local/ESSBASE0///139929633446208/[Fri Jun 11 06:11:59 2016]Error(10

日付フィールドを抽出し、その日付を区切り記号($)を持つ列として追加する必要があります。日付はファイルのどこにでも表示できます。

[Fri Jun 10 06:11:59 2016]$Sampleoutput1[Fri Jun 10 06:11:59 2016]Local/ESSBASE0///139929633446208/Error(10
[Fri Jun 11 06:11:59 2016]$Sampleoutput1Local/ESSBASE0///139929633446208/[Fri Jun 11 06:11:59 2016]Error(10

ベストアンサー1

日付が常に[...に含まれていて、]これが行の最初であると仮定すると、[さまざまな方法を使用できます。私が一般的に使用する2つのこと:

2つのコマンドを使用してくださいcut(怠惰なオプションですが、その機能を理解するのは簡単です)。

cut -d'[' -f2 $srcfile | cut -d ']' -f1

sed単純な正規表現を使用する標準オプション:

sed 's/.*\[\([^]]*\)].*/\1/' $srcfile

出力が複数の文字を含むより複雑な場合は、より複雑な文字列を含むオプションを使用する必要が[あります。sed

sed 's/.*\[\(... ... .. ..:..:.. ....\)].*/\1/' $srcfile

編集:修正された質問は文字列の前に追加し、残りの行は変更しないようにします。だから私たちはsed少し変更されたバリエーションを使います:

sed 's/\(.*\[\(... ... .. ..:..:.. ....\)].*\)/[\2]$\1/' $srcfile

結果:

[Fri Jun 10 06:11:59 2016]$Sampleoutput1[Fri Jun 10 06:11:59 2016]Local/ESSBASE0///139929633446208/Error(10
[Fri Jun 11 06:11:59 2016]$Sampleoutput1Local/ESSBASE0///139929633446208/[Fri Jun 11 06:11:59 2016]Error(10

おすすめ記事