Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Linux 使用awk更改文件中的日期格式_Linux_Date_Awk_Format - Fatal编程技术网

Linux 使用awk更改文件中的日期格式

Linux 使用awk更改文件中的日期格式,linux,date,awk,format,Linux,Date,Awk,Format,其工作正常,但awk内的日期-d不工作 文件 第一种方法 KOD19|KAD37748|DEL37728|VIDYA|19521029 1010|201209111625 SASI19|NAS38228|DEL37728|KARTHIKA|19521029 0000|201308071912 RADHA94|VAS37748|DEL37728|LALINKA|19521029 0000|201407061815 第二种方法 awk 'BEGIN {FS=OFS="|"} $5=date -d

其工作正常,但awk内的日期-d不工作

文件

第一种方法

KOD19|KAD37748|DEL37728|VIDYA|19521029 1010|201209111625
SASI19|NAS38228|DEL37728|KARTHIKA|19521029 0000|201308071912
RADHA94|VAS37748|DEL37728|LALINKA|19521029 0000|201407061815
第二种方法

awk 'BEGIN {FS=OFS="|"} $5=date -d "$5"+"%Y-%m-%d %H:%M" {print}' file
期望输出

awk -F '|' '{$5=date -d $5+"%Y-%m-%d %H:%M"; {OFS="|"}; print}' file
我想将“文件”的第五列转换为用户输入日期格式。 实际上,列号和日期格式是动态的,即dt=“%Y-%m-%d%H:%m”和num=$5这将非常取决于用户需求。

只需使用
match()
捕获第5个字段中的数据并将其打印回来:

KOD19|KAD37748|DEL37728|VIDYA|1952-10-29 10:10|201209111625
SASI19|NAS38228|DEL37728|KARTHIKA|1952-10-29 10:10|201308071912
RADHA94|VAS37748|DEL37728|LALINKA|1952-10-29 10:10|201407061815
它返回:

awk -F"|" -v OFS="|" '{
        match($5, /([0-9]{4})([0-9]{2})([0-9]{2}) ([0-9]{2})([0-9]{2})/, a);
        $5=sprintf("%d-%d-%d %s:%s", a[1], a[2], a[3], a[4], a[5])
     }1' file

请参阅。

中有关此技术的完整说明。您的
var1=date-d“…”
命令错误。您需要说
var=$(命令)
。此外,您不能像使用
system()
或类似方法那样从awk运行外部工具。最后,预期的输出是什么?awk-F“|”-v of s=“|”{match($5,/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/,a);$5=sprintf(%d-%d%d%s:%s),a[1],a[1],a[2],a[3],a[4],a[5],a[1]文件我在第5列的第5列的位置得到了错误的输出:@0:@0我最初提供的答案是好的。一定要给出一个答案,这样我们才能处理它。否则,这将导致双方的挫败感:你得不到任何东西,我们试图解决一些不断变化的问题。好吧,很抱歉,我提供的文件是一个示例文件,我提供的第5和第6个文件的内容是日期列和用户输入日期列以及他想要的日期formats@Ben您在问题中说,实际上列号和日期格式是动态的,即dt=“%Y-%m-%d%H:%m”num=$5这取决于用户的需求,我对此无能为力。您可以使用
match($line,…)
并将
line
作为变量。关于格式,它需要一些没有更多细节就无法完成的工作。使用我上面的awk命令,你能帮我解决[awk-F'{$5=date-d$5+%Y-%m-%d%H:%m];{OFS=“|”};print}文件]命令,或者我尝试另一个awk'BEGIN{FS=OFS=“|”}{$5=strftime(“%c”,$5)}{print}文件,但它也给出了错误的答案
awk -F"|" -v OFS="|" '{
        match($5, /([0-9]{4})([0-9]{2})([0-9]{2}) ([0-9]{2})([0-9]{2})/, a);
        $5=sprintf("%d-%d-%d %s:%s", a[1], a[2], a[3], a[4], a[5])
     }1' file
$ awk -F"|" -v OFS="|" '{match($5, /([0-9]{4})([0-9]{2})([0-9]{2}) ([0-9]{2})([0-9]{2})/, a); $5=sprintf("%d-%d-%d %s:%s", a[1], a[2], a[3], a[4], a[5])}1' file
KOD19|KAD37748|DEL37728|VIDYA|1952-10-29 10:10|201209111625
SASI19|NAS38228|DEL37728|KARTHIKA|1952-10-29 00:00|201308071912
RADHA94|VAS37748|DEL37728|LALINKA|1952-10-29 00:00|201407061815