以下の表の情報(偽情報)を使用してスクリプトを作成する必要があります。
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
mktime
EPOCH形式の文字列からタイムスタンプ(秒単位)を生成する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