文件1
ABY37499|ANK37528|DEL37508|SRILANKA|195203230000|445500759
ARJU7499|CHA38008|DEL37508|SRILANKA|195203230000|445500759
IB1704174|ANK37528|DEL37508|SRILANKA|195203230000|445500759
IB1704174|CHA38008|DEL37508|SRILANKA|195203230000|445500759
ABY37500|ANK37529|DEL37509|BRAZIL|195203240000|445500757
ARJU7500|CHA38009|DEL37509|BRAZIL|195203240000|445500757
IB1704175|ANK37529|DEL37509|BRAZIL|195203240000|445500757
我想将第五列日期转换为
下面的另一个格式脚本#!/bin/sh
dt="%Y-%m-%d %H:%M"
awk -F '|' '{print $5}' file1 | sed 's/.\{8\}/& /g'> f1.txt
aa=`(date -f f1.txt +"$dt")`
echo "$aa"
awk -F '|' '$5=$aa' file1
回声" $ aa"得到了所需的输出,但我不能分配$ aa到$ 5请帮助我。
感谢
答案 0 :(得分:0)
我在Etan Reisner的评论之后纠正了我的回答
来自AWK男子:
输入以称为记录的单位读取,并由规则处理 你的程序一次一条记录。默认情况下,每条记录都是一条 线。每条记录都会自动拆分为称为字段的块。 这使程序更方便地处理a的各个部分 记录。
字段存储在变量$1, $2, ...
和
awk看到的字段内容可以在awk中更改 程序;这会改变awk认为当前输入记录的内容。
查看该人page
因此,这个表达式:
awk -F '|' '$5=$aa' file1
没有替代 file1 的第五列的效果。
您必须将修改后的输出写入第二个文件。
答案 1 :(得分:0)
可能这可以帮助你sed
echo 195203240000 | sed -n -e "s_\(....\)\(..\)\(..\)\(..\)\(..\)_\1-\2-\3 \4:\5_p"
1952-03-24 00:00
答案 2 :(得分:0)
这个awk脚本应该做你想要的。
它并不完全漂亮,但假设输入格式一致,它可以正常工作。
awk '{$5=sprintf("%s-%s-%s %s:%s\n",
substr($5,1,4), substr($5,5,2), substr($5,7,2),
substr($5,9,2), substr($5,11,2))} 7' file1 > file1.new
它会将字段的新值分配给$5
,然后使用7
(作为真值y)来获取默认的awk {print}
操作以打印修改后的行。