日付形式を変更してソースファイルに追加

日付形式を変更してソースファイルに追加

a.txtという名前の次のファイルがあります。

[2016-03-30T04:51:51.599-04:00]!ER_DEV!Port_Conflict!/u05/app/
[2016-01-20T04:30:21.885-04:00]!ER_DEV!Port_Conflict!/u05/app/

次のように修正する必要があります。

  2016-03-30 04:51:51!ER_DEV!Port_Conflict!/u05/app/
  2016-01-20 04:30:21!ER_DEV!Port_Conflict!/u05/app/

[2016-03-30T04:51:51.599-04:00] を 2016-03-30 04:51:51 に変更するコマンドを作成しました。しかし、クエリ出力をソースファイルにどのように追加できますか?

  awk -F'!' '{print $1}' a.txt | awk -F '[T.]' '{print $1 " " $2}' | awk '{gsub(/\[/,"")}1' 

答え1

パターンマッチングをどれだけ厳密に適用するかによって異なります。 「不良データ」にあまり気にしないと簡単な方法でsed

sed 's/^\[\(....-..-..\)T\(..:..:..\).......:..]/\1 \2/'

sedこのフラグを理解するバージョンがある場合は、-iファイルの内部更新を実行できます。

sed -i 's/^\[\(....-..-..\)T\(..:..:..\).......:..]/\1 \2/' a.txt

答え2

完了しやすいsed

sed '
    s/T/ /      #exchange "T" by "space"
    s/\[/ /     #exchange "[" by "space"
    s/\..*\]//  #remove from "." till "]" included
    ' a.txt

しかし、あなたが好むならアッ

awk -F'[][]' '
    {
        split($2, a,"[T.]")
        $2=a[1]
        $3=a[2] $3
        print
    }
    ' a.txt

関連情報