Bash 转换awk中的日期格式,行包含2个日期和一个ip
我有以下几行:Bash 转换awk中的日期格式,行包含2个日期和一个ip,bash,shell,awk,Bash,Shell,Awk,我有以下几行: 192.168.1.200§Feb 24 10:22:14 2014 GMT§Aug 24 10:22:14 2014 GMT 我想用awk(或其他东西)把它转换成这行: 我可以使用以下命令使用awk转换一个日期: awk 'BEGIN { FS="§"} {cmd1="date \"+%Y-%m-%d\" -d \""$2"\""; cmd1 | getline var; print var}' 但我不知道如何在一个命令中转换该行?试试以下方法: BEGIN {
192.168.1.200§Feb 24 10:22:14 2014 GMT§Aug 24 10:22:14 2014 GMT
我想用awk(或其他东西)把它转换成这行:
我可以使用以下命令使用awk转换一个日期:
awk 'BEGIN { FS="§"} {cmd1="date \"+%Y-%m-%d\" -d \""$2"\""; cmd1 | getline var; print var}'
但我不知道如何在一个命令中转换该行?试试以下方法:
BEGIN {
FS="§"
}
{
cmd1="date \"+%Y-%m-%d\" -d \""$2"\""
cmd1 | getline var1
cmd2="date \"+%Y-%m-%d\" -d \""$3"\""
cmd2 | getline var2
print var1, var2, $1
}
用法:
$ cat in.txt
192.168.1.200§Feb 24 10:22:14 2014 GMT§Aug 24 10:22:14 2014 GMT
$ awk -f conv.awk < in.txt
2014-02-24 2014-08-24 192.168.1.200
$cat in.txt
192.168.1.200§2014年2月24日10:22:14 GMT§2014年8月24日10:22:14 GMT
$awk-f conv.awk这里是使用awk的一种方法:
awk -v FS="§" '
BEGIN {
split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec", month, / /)
for (i=1; i<=12; i++) { mm[month[i]] = sprintf("%02d",i) }
}
{
split($2, d1, /[ :]/);
split($3, d2, /[ :]/);
print d1[6]"-"mm[d1[1]]"-"d1[2], d2[6]"-"mm[d2[1]]"-"d2[2], $1
}' file
2014-02-24 2014-08-24 192.168.1.200
awk-v FS=“§”'
开始{
拆分(“一月-二月-三月-四月-五月-六月-七月-八月-九月-十月-十一月-十二月”,月份//)
对于(i=1;iYup,这是怎么做的…+1.谢谢@EdMorton..这意味着从大师那里得到一张赞成票非常重要!:)
awk -v FS="§" '
BEGIN {
split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec", month, / /)
for (i=1; i<=12; i++) { mm[month[i]] = sprintf("%02d",i) }
}
{
split($2, d1, /[ :]/);
split($3, d2, /[ :]/);
print d1[6]"-"mm[d1[1]]"-"d1[2], d2[6]"-"mm[d2[1]]"-"d2[2], $1
}' file
2014-02-24 2014-08-24 192.168.1.200