亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 請教把文件中英文格式的時間字段替換成標(biāo)準(zhǔn)格式的時間字段,例如May 20 2014 10:29:41 [打印本頁]

作者: stonejar    時間: 2016-01-20 15:55
標(biāo)題: 請教把文件中英文格式的時間字段替換成標(biāo)準(zhǔn)格式的時間字段,例如May 20 2014 10:29:41
我有多個文件需要這樣處理,但每個文件的分隔符數(shù)量不一樣且時間字段位置不一樣和一條記錄可能會有多個時間字段怎么辦呢?
文本中可能出現(xiàn)所有12個月的英文字串替換成數(shù)字月份,并且把后面的微秒去掉,并且如果是AM時直接去掉AM,為PM時時間加上12小時為24小時制。
類似要格式化文件中May 20 2014 10:29:41:076AM成2014-05-20 10:29:41,
文件中可能字段值會有回車換行,可能會有空行,但空行不能去掉,回車換行也不能去掉

謝謝!

例如file1:
ggg##Jan 20 2014 10:29:41:076PM##abc##中國
234sdf##Apr 25 2015 10:29:41:076AM##gcd##美國
dfgdfg
4747##Sep 29 2015 1:29:41:076AM##yyy##美國
經(jīng)過替換后變成
ggg##2014-01-20 22:29:41##abc##中國
234sdf##2015-04-25 10:29:41##gcd##美國
dfgdfg
4747##2015-09-29 01:29:41##yyy##美國

file2:
1##5667##Jan 2 2013 10:29:41:076PM##rtyr##中國
2##ewrer##Apr 17 2016 10:29:41:076AM##rty##埃及

3##hjkhjk##Oct 9 2012 1:29:41:076AM##tyityu##伊朗

經(jīng)過替換后:
1##5667##2013-01-02 22:29:41##rtyr##中國
2##ewrer##2016-04-17 10:29:41##rty##埃及

3##hjkhjk##2012-10-09 01:29:41##tyityu##伊朗

file3:
1##5667##Jan 2 2013 10:29:41:076PM##Jan 2 2013 10:29:41:076PM##rtyr##中國
2##ewrer##Apr 17 2016 10:29:41:076AM##Jan 2 2013 10:29:41:076PM##rty##埃及

3##hjkhjk##Oct 9 2012 1:29:41:076AM##Jan 2 2013 10:29:41:076PM##tyityu##伊朗
經(jīng)過替換后:
1##5667##2013-01-02 22:29:41##2013-01-02 22:29:41##rtyr##中國
2##ewrer##2016-04-17 10:29:41##2013-01-02 22:29:41##rty##埃及

3##hjkhjk##2012-10-09 01:29:41##2013-01-02 22:29:41##tyityu##伊朗

感謝各位大神!
作者: haooooaaa    時間: 2016-01-20 16:13
gawk 4
  1. awk '
  2. BEGIN{
  3.     OFS=FS="##"
  4.     a["PM"]=12
  5. }
  6. NF{
  7.     patsplit($0,m,"... [0-9]{1,2} [0-9]{4} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}:[0-9]{3}..")
  8.     for(i in m){
  9.         split(m[i],t,"[ :]")
  10.         sub(m[i],strftime("%F %T",mktime(t[3]" "(index("JanFebMarAprMayJunJulAugSepOctNovDec",t[1])+2)/3" "t[2]" "t[4]" "t[5]" "t[6])+a[substr(t[7],4)]*3600))
  11.     }
  12.     print
  13. }
  14. ' file
復(fù)制代碼

作者: stonejar    時間: 2016-01-20 16:50
回復(fù) 2# haooooaaa


    高手您好,執(zhí)行了報(bào)錯信息:
awk: 命令行:13: (FILENAME=y FNR=1) 致命錯誤: 函數(shù)“patsplit”未定義
作者: itfly3    時間: 2016-01-20 16:52
sed -r 's/:[^:]*(.)M/ \1M/' file|while read line ;do time=`echo $line|grep -oP "[^#]+:[^#]+"`;if [[ $? -eq 0 ]];then i="`date -d "$time" +%F" "%T`";echo $line|sed "s/[^#]*:[^#]*/$i/"; else echo $line;fi;done

把file換成你的文件名即可。
作者: itfly3    時間: 2016-01-20 16:53
sed -r 's/:[^:]*(.)M/ \1M/' file|while read line ;do time=`echo $line|grep -oP "[^#]+:[^#]+"`;if [[ $? -eq 0 ]];then i="`date -d "$time" +%F" "%T`";echo $line|sed "s/[^#]*:[^#]*/$i/"; else echo $line;fi;done

把file換成你的文件名即可。
作者: itfly3    時間: 2016-01-20 16:54
  1. sed -r 's/:[^:]*(.)M/ \1M/' [color=Red]file[/color]|while read line ;do time=`echo $line|grep -oP "[^#]+:[^#]+"`;if [[ $? -eq 0 ]];then i="`date -d "$time" +%F" "%T`";echo $line|sed "s/[^#]*:[^#]*/$i/"; else echo $line;fi;done
復(fù)制代碼
把file換成你的文件名
作者: itfly3    時間: 2016-01-20 16:55
111111111111111111111111
作者: itfly3    時間: 2016-01-20 16:56
sed -r 's/:[^:]*(.)M/ \1M/' file|while read line ;do time=`echo $line|grep -oP "[^#]+:[^#]+"`;if [[ $? -eq 0 ]];then i="`date -d "$time" +%F" "%T`";echo $line|sed "s/[^#]*:[^#]*/$i/"; else echo $line;fi;done

把file換成你的文件名即可。
作者: itfly3    時間: 2016-01-20 16:57
sed -r 's/:[^:]*(.)M/ \1M/' file|while read line ;do time=`echo $line|grep -oP "[^#]+:[^#]+"`;if [[ $? -eq 0 ]];then i="`date -d "$time" +%F" "%T`";echo $line|sed "s/[^#]*:[^#]*/$i/"; else echo $line;fi;done

把file換成你的文件名即可。
作者: itfly3    時間: 2016-01-20 16:57
11111111111111111111111111111
作者: itfly3    時間: 2016-01-20 17:00
sed -r 's/:[^:]*(.)M/ \1M/' file|while read line ;do time=`echo $line|grep -oP "[^#]+:[^#]+"`;if [[ $? -eq 0 ]];then i="`date -d "$time" +%F" "%T`";echo $line|sed "s/[^#]*:[^#]*/$i/"; else echo $line;fi;done

把file換成你的文件名即可。
作者: itfly3    時間: 2016-01-20 17:04
sed -r 's/:[^:]*(.)M/ \1M/' file|while read line ;do time=`echo $line|grep -oP "[^#]+:[^#]+"`;if [[ $? -eq 0 ]];then i="`date -d "$time" +%F" "%T`";echo $line|sed "s/[^#]*:[^#]*/$i/"; else echo $line;fi;done

把file換成你的文件名即可。
作者: itfly3    時間: 2016-01-20 17:16
11111111111111111111111
作者: stonejar    時間: 2016-01-20 17:33
回復(fù) 2# haooooaaa

謝謝高手,我明白了,是要裝gawk 4以上版本的。

但還有個問題,例如文件x2內(nèi)容如下:
cat x2
000014##1##11##129##Jun 27 2014 12:00:00:000AM## ## ## ##1212121yaoxw##3## ## ## ## ## ## ## ##行李晚到##Jul  3 2014 10:47:27:786AM##N####00##4##yaoxw1##Jul  2 2014 10:47:27:630AM##00##WD####13800138000#### ## ##yaoxw1##Jul 21 2014  2:36:42:656PM##749659##Aug 25 2014  2:31:31:313PM## ##Y####N## ##yaoxw##13800138000## ##ff8080814113e09d0141c5ef70a5020e## ## ## ## ##滿意############################

會報(bào)錯如下:
awk: cmd. line:19: (FILENAME=x2 FNR=1) fatal: strftime: second argument less than 0 or too big for time_t

   
作者: stonejar    時間: 2016-01-20 17:39
回復(fù) 2# haooooaaa


謝謝高手,我明白了,是要裝gawk 4以上版本的。

但還有個問題,例如文件x2內(nèi)容如下:
cat x2
000014##1##11##129##Jun 27 2014 12:00:00:000AM## ## ## ##1212121yaoxw##3## ## ## ## ## ## ## ##行李晚到##Jul  3 2014 10:47:27:786AM##N####00##4##yaoxw1##Jul  2 2014 10:47:27:630AM##00##WD####13800138000#### ## ##yaoxw1##Jul 21 2014  2:36:42:656PM##749659##Aug 25 2014  2:31:31:313PM## ##Y####N## ##yaoxw##13800138000## ##ff8080814113e09d0141c5ef70a5020e## ## ## ## ##滿意############################

會報(bào)錯如下:
awk: cmd. line:19: (FILENAME=x2 FNR=1) fatal: strftime: second argument less than 0 or too big for time_t

   
作者: stonejar    時間: 2016-01-20 17:47
回復(fù) 2# haooooaaa


謝謝高手,我明白了,是要裝gawk 4以上版本的。

但還有個問題,例如文件x2內(nèi)容如下:
cat x2
000014##1##11##129##Jun 27 2014 12:00:00:000AM## ## ## ##1212121yaoxw##3## ## ## ## ## ## ## ##行李晚到##Jul  3 2014 10:47:27:786AM##N####00##4##yaoxw1##Jul  2 2014 10:47:27:630AM##00##WD####13800138000#### ## ##yaoxw1##Jul 21 2014  2:36:42:656PM##749659##Aug 25 2014  2:31:31:313PM## ##Y####N## ##yaoxw##13800138000## ##ff8080814113e09d0141c5ef70a5020e## ## ## ## ##滿意############################

會報(bào)錯如下:
awk: cmd. line:19: (FILENAME=x2 FNR=1) fatal: strftime: second argument less than 0 or too big for time_t

   
作者: jason680    時間: 2016-01-20 20:47
本帖最后由 jason680 于 2016-01-20 20:52 編輯

回復(fù) 1# stonejar

$ cat FILE
1##5667##Jan 2 2013 10:29:41:076PM##Jan 2 2013 10:29:41:076PM##rtyr##中國
2##ewrer##Apr 17 2016 10:29:41:076AM##Jan 2 2013 10:29:41:076PM##rty##埃及

3##hjkhjk##Oct 9 2012 1:29:41:076AM##Jan 2 2013 10:29:41:076PM##tyityu##伊朗

$ awk  'BEGIN{FS=OFS="##";t=split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",a," ");for(n=1;n<=t;n++)a[a[n]]=n;a["PM"]=12}{for(n=1;n<=NF;n++)if(match($n,/(...) ([0-9]+) +([0-9]+) +([0-9]+):([0-9]+):([0-9]+):...([AP]M)/,m))$n=sprintf("%d-%02d-%02d %02d:%02d:%02d",m[3],a[m[1]],m[2],m[4]+a[m[7]],m[5],m[6])}1' FILE
1##5667##2013-01-02 22:29:41##2013-01-02 22:29:41##rtyr##中國
2##ewrer##2016-04-17 10:29:41##2013-01-02 22:29:41##rty##埃及

3##hjkhjk##2012-10-09 01:29:41##2013-01-02 22:29:41##tyityu##伊朗
   
作者: stonejar    時間: 2016-01-21 08:50
回復(fù) 2# haooooaaa

您好,您哪個腳本在轉(zhuǎn)換日期是單個值且前面有兩個空格(例如3日它不是表示成“ 03”,而是表示成了“  3”)或者小時是單個值且前面有兩個空格(例如2點(diǎn)它不是表示成“ 02”,而是表示成了“  2”)時會報(bào)錯如下:
awk: cmd. line:19: (FILENAME=x2 FNR=1) fatal: strftime: second argument less than 0 or too big for time_t

需要轉(zhuǎn)換的文件如下:
000014##1##11##129##Jun 27 2014 12:00:00:000AM## ## ## ##1212121yaoxw##3## ## ## ## ## ## ## ##行李晚到##Jul  3 2014 10:47:27:786AM##N####00##4##yaoxw1##Jul  2 2014 10:47:27:630AM##00##WD####13800138000#### ## ##yaoxw1##Jul 21 2014  2:36:42:656PM##749659##Aug 25 2014  2:31:31:313PM## ##Y####N## ##yaoxw##13800138000## ##ff8080814113e09d0141c5ef70a5020e## ## ## ## ##滿意############################

謝謝您的幫助,非常感動



   
作者: jason680    時間: 2016-01-21 09:58
本帖最后由 jason680 于 2016-01-21 09:59 編輯

回復(fù) 18# stonejar

$ awk  'BEGIN{FS=OFS="##";t=split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",a," ");for(n=1;n<=t;n++)a[a[n]]=n;a["PM"]=12}{for(n=1;n<=NF;n++)if(match($n,/^(...) +([0-9]+) +([0-9]+) +([0-9]+):([0-9]+):([0-9]+):...([AP]M)/,m))$n=sprintf("%d-%02d-%02d %02d:%02d:%02d",m[3],a[m[1]],m[2],m[4]+a[m[7]],m[5],m[6])}1' x2 > x3

$ cat x3
000014##1##11##129##2014-06-27 12:00:00## ## ## ##1212121yaoxw##3## ## ## ## ## ## ## ##行李晚到##2014-07-03 10:47:27##N####00##4##yaoxw1##2014-07-02 10:47:27##00##WD####13800138000#### ## ##yaoxw1##2014-07-21 14:36:42##749659##2014-08-25 14:31:31## ##Y####N## ##yaoxw##13800138000## ##ff8080814113e09d0141c5ef70a5020e## ## ## ## ##滿意############################

$ awk  'BEGIN{FS="##"}{getline s < "x3";split(s,a);for(n=1;n<=NF;n++)if($n!=a[n])print $n" => "a[n]}' x2
Jun 27 2014 12:00:00:000AM => 2014-06-27 12:00:00
Jul  3 2014 10:47:27:786AM => 2014-07-03 10:47:27
Jul  2 2014 10:47:27:630AM => 2014-07-02 10:47:27
Jul 21 2014  2:36:42:656PM => 2014-07-21 14:36:42
Aug 25 2014  2:31:31:313PM => 2014-08-25 14:31:31

   
作者: stonejar    時間: 2016-01-21 11:47
回復(fù) 19# jason680


    您好,轉(zhuǎn)換出來只剩下時間了哦,其他字符串也要回補(bǔ)哦,例如
轉(zhuǎn)換前的文件是:
000014##1##11##129##Jun 27 2014 12:00:00:000AM## ## ## ##1212121yaoxw##3## ## ## ## ## ## ## ##行李晚到##Jul  3 2014 10:47:27:786AM##N####00##4##yaoxw1##Jul  2 2014 10:47:27:630AM##00##WD####13800138000#### ## ##yaoxw1##Jul 21 2014  2:36:42:656PM##749659##Aug 25 2014  2:31:31:313PM## ##Y####N## ##yaoxw##13800138000## ##ff8080814113e09d0141c5ef70a5020e## ## ## ## ##滿意############################

轉(zhuǎn)換后的需要是這樣的:
000014##1##11##129##2014-06-27 12:00:00## ## ## ##1212121yaoxw##3## ## ## ## ## ## ## ##行李晚到##2014-07-03 10:47:27##N####00##4##yaoxw1##2014-07-02 10:47:27##00##WD####13800138000#### ## ##yaoxw1##2014-07-21 14:36:42##749659##2014-08-25 14:31:31## ##Y####N## ##yaoxw##13800138000## ##ff8080814113e09d0141c5ef70a5020e## ## ## ## ##滿意############################


非常感謝您的幫助
作者: haooooaaa    時間: 2016-01-21 11:55
本帖最后由 haooooaaa 于 2016-01-21 11:56 編輯

回復(fù) 18# stonejar
  1. awk '
  2. BEGIN{
  3.     a["PM"]=12
  4. }
  5. NF{
  6.     patsplit($0,m,"...  ?[0-9]{1,2} [0-9]{4}  ?[0-9]{1,2}:[0-9]{2}:[0-9]{2}:[0-9]{3}..")
  7.     for(i in m){
  8.         split(m[i],t,"[ :]+")
  9.         sub(m[i],strftime("%F %T",mktime(t[3]" "(index("JanFebMarAprMayJunJulAugSepOctNovDec",t[1])+2)/3" "t[2]" "t[4]" "t[5]" "t[6])+a[substr(t[7],4)]*3600))
  10.     }
  11.     print
  12. }
  13. ' file
復(fù)制代碼

作者: jason680    時間: 2016-01-22 08:05
回復(fù) 20# stonejar

>> ... 其他字符串也要回補(bǔ)哦

Yes, I did. 有的,有"緣"者得之...   




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2