Shell-Script
幫助 awk / sed shell 腳本
我必須使用下表中的資訊(假資訊)製作腳本
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
關於如何做到這一點的任何想法?恐怕它有點超出我的技能範圍
對於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
或者對於沒有e命令的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