awk/sed シェルスクリプトヘルプ

awk/sed シェルスクリプトヘルプ

以下の表の情報(偽情報)を使用してスクリプトを作成する必要があります。

AnimalNumber,DOB,Gender,Breed,Date-moved-in
IE161289240602,04/02/2010,M,AAX,20/07/2011,
IE141424490333,13/01/2009,M,LMX,21/09/2010,
IE151424420395,19/01/2007,F,LMX,20/08/2010,

基本的には生年月日だけ書けばいいのですがanimalnumber、動物番号はこう分けなければなりません。

IE161289240602しなければならない1612892 4 0602

そして、生まれた月と年だけをリストする必要があるので、最初の行は次のようになります。

Feb 2010 1412892 4 0602

これを行う方法についてのアイデアはありますか?これは私の能力の範囲を少し超えているようです。

ベストアンサー1

~のためGNU awk

awk -F, '
    NR>1{
        sub("..","")                   #remove first two letters (mean IE)
        d=""
        for(i=split($2,D,"/");i>0;i--) #format 2nd field into `YY MM DD` 
            d=d D[i] " "
        print strftime("%b %Y",mktime(d 0" "0" "0)),gensub("[0-9]"," & ",8,$1)
    }' file
  • mktimeEPOCH形式の文字列からタイムスタンプ(秒単位)を生成するYYYY MM DD HH MM SS
  • strftimeタイムスタンプを必要な形式に変換します(の場合%b %Y)。
  • gensub最初のフィールドの数字()を末尾のスペース8()自体()で置き換えます。[0-9]$1&

文字列形式のみを見ることができるので、次のものを使用できます。sed:

sed -r '
    1d
    s/./ & /10
    s|(../)(../)|\2\1|
    s/..([^,]*),([^,]*).*/date -d "\2" +"%b %Y \1"/e
    ' file

またはsedいいえ金利注文する

sed '
    1d
    s/./ & /10
    s|\(../\)\(../\)|\2\1|
    s/..\([^,]*\),\([^,]*\).*/date -d "\2" +"%b %Y \1"/
    ' file | bash

または

sed '
    s/./ & /10
    s/../+"%b %Y /
    s/,/" -d /
    s|\(../\)\(../\)|\2\1|
    s/,/\n/
    1!P
    d' file | xargs -n3 date

おすすめ記事