Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 转换awk中的日期格式,行包含2个日期和一个ip_Bash_Shell_Awk - Fatal编程技术网

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