我有一个包含18列的源文件,其中第10,11和15列的格式为dd / mm / yyyy,所有这些都需要转换为yyyy-mm-dd并与其他列一起写入目标文件。 我知道变量上的日期格式化功能,但不知道如何在文件中的几列上应用相同的功能。
答案 0 :(得分:1)
我没有可用于测试的机器,但考虑使用awk
具有一点功能,因为你做了3次同样的事情。它看起来像这样:
awk ‘
function dodate(in){
split(in,/\//,a) # split existing date into elements of array “a”
return a[3] “-“ a[2] “-“ a[1]
}
{ $10=dodate($10); $11=dodate($11); $15=dodate($15); print }’ yourFile
如果每行上的字段用逗号分隔,请告诉awk
:
awk -F, ...
答案 1 :(得分:0)
也许您可以使用命令awk
来解决它。
由于你有3个cols包含日期(col 10,11,15),这里我假设一个示例字符串,字段分隔符是|
,col包含date是第4个col
aa|bb|cc|29/09/2017|dd|ee|ff
使用String-Manipulation Functions提取日期,然后使用getline对其进行格式化,以将其格式化为预期的语法。
命令是
echo 'aa|bb|cc|2017-09-29|dd|ee|ff' | awk -F\| 'BEGIN{OFS="|"}{$4=gensub(/([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})/,"\\3\\2\\1","g",$4); "date --date=\""$4"\" +\"%F\"" | getline a; $4=a; print $0}'
输出
aa|bb|cc|2017-09-29|dd|ee|ff
希望能帮到你。
答案 2 :(得分:0)
如果您安装了dateutils
软件包,则可以使用dateutils.dconv
cat file | dateutils.dconv -S -i "%d/%m/%Y"
-i
指定输入日期格式-S
sed模式,仅处理匹配的字符串并复制其余字符串输入文件
aa|bb|cc|29/09/2017|dd|ee|ff|02/10/2017|gg
输出
aa|bb|cc|2017-09-29|dd|ee|ff|2017-10-02|gg
答案 3 :(得分:0)
我使用日期命令:
while read fmtDate
do
date -d ${fmtDate} "+%Y-%m-%d"
done