Linux 如何在unix中更改.csv文件中的日期格式
我想将日期格式更改为Linux 如何在unix中更改.csv文件中的日期格式,linux,shell,csv,unix,unix-timestamp,Linux,Shell,Csv,Unix,Unix Timestamp,我想将日期格式更改为2013-08-01,我文件中的当前格式为8/10/13,该文件包含数千条记录,我还有大量文件 请对此提出建议,如何转换 +abcd 2013^8/1/13^Bing^Milwaukee_abcd High Volume^Abcd^izvd4PZo^^Wisconsin^Chicago^http://ad.abcd.net/clk;256581924;80198650;s;u=ms&sv1=izvd4PZo&sv2={AdId}&sv3=3392oik
2013-08-01
,我文件中的当前格式为8/10/13
,该文件包含数千条记录,我还有大量文件
请对此提出建议,如何转换
+abcd 2013^8/1/13^Bing^Milwaukee_abcd High Volume^Abcd^izvd4PZo^^Wisconsin^Chicago^http://ad.abcd.net/clk;256581924;80198650;s;u=ms&sv1=izvd4PZo&sv2={AdId}&sv3=3392oik17016&sv4={keyword}&sv5={matchtype};?http://www.chicago.buyacar.com/specials?srchid=|Milwaukee_cdhdf+High+Volume|_%2Berhefn_2013^Broad^5^1^1.47^
+sjhrejk models^8/1/13^Bing^Milwaukee_shdh High Volume^fhekj^9NT23JfC^^Wisconsin^Chicago^http://ad.fhd.net/clk;256581924;80198650;s;u=ms&sv1=9NT23JfC&sv2={AdId}&sv3=3392oik17016&sv4={keyword}&sv5={matchtype};?http://www.chicago.buyhfrkeu.com/specials?srchid=|Milwaukee_djkjfhkd+High+Volume|_%2Bdhk_models^Broad^14^4^5.58^
buy a +jkdsh^8/1/13^Bing^Milwaukee_kjfheu High Volume^jkdfhdj^T0ncFpv4^^Wisconsin^Chicago^http://ad.jfd.net/clk;256581924;80198650;s;u=ms&sv1=T0ncFpv4&sv2={AdId}&sv3=3392oik17016&sv4={keyword}&sv5={matchtype};?http://www.chicago.buyfjj.com/specials?srchid=|Milwaukee_jefrhjd+High+Volume|buy_a_%2Bfhd^Broad^15^1^2.44^
谢谢 您可以使用
-d
传递当前格式和“+…”
指示新格式来替换日期:
$ date -d"8/10/13" "+%Y-%m-%d"
2013-08-10
要使用此格式更新文件中的所有内容,请继续阅读行,获取此类字段并格式化它们:
while IFS= read -r line
do
mydate=$(grep -Po '[0-9]+/[0-9]+/[0-9]+' <<< "$line") # gets 8/1/13
# perform the replacement in case there is date to process
if [[ ! -z "$mydate" ]]; then
newdate=$(date -d"$mydate" "+%Y-%m-%d") # converts to 2013-08-01
sed -i "s#$mydate#$newdate#" file # replaces in the text (-i option)
fi
done < file
您可以使用
-d
传递当前格式和“+…”
指示新格式来替换日期:
$ date -d"8/10/13" "+%Y-%m-%d"
2013-08-10
要使用此格式更新文件中的所有内容,请继续阅读行,获取此类字段并格式化它们:
while IFS= read -r line
do
mydate=$(grep -Po '[0-9]+/[0-9]+/[0-9]+' <<< "$line") # gets 8/1/13
# perform the replacement in case there is date to process
if [[ ! -z "$mydate" ]]; then
newdate=$(date -d"$mydate" "+%Y-%m-%d") # converts to 2013-08-01
sed -i "s#$mydate#$newdate#" file # replaces in the text (-i option)
fi
done < file
这是我的解决方案
#!/bin/bash
IFS='^'
while read -ra LINE; do
LINE[1]=$(exec date -d "${LINE[1]}" '+%F')
echo "${LINE[*]}"
done
将其保存到文件并运行bash script.shoutput
示例输出:
+abcd 2013^2013-08-01^Bing^Milwaukee_abcd High Volume^Abcd^izvd4PZo^^Wisconsin^Chicago^http://ad.abcd.net/clk;256581924;80198650;s;u=ms&sv1=izvd4PZo&sv2={AdId}&sv3=3392oik17016&sv4={keyword}&sv5={matchtype};?http://www.chicago.buyacar.com/specials?srchid=|Milwaukee_cdhdf+High+Volume|_%2Berhefn_2013^Broad^5^1^1.47
+sjhrejk models^2013-08-01^Bing^Milwaukee_shdh High Volume^fhekj^9NT23JfC^^Wisconsin^Chicago^http://ad.fhd.net/clk;256581924;80198650;s;u=ms&sv1=9NT23JfC&sv2={AdId}&sv3=3392oik17016&sv4={keyword}&sv5={matchtype};?http://www.chicago.buyhfrkeu.com/specials?srchid=|Milwaukee_djkjfhkd+High+Volume|_%2Bdhk_models^Broad^14^4^5.58
buy a +jkdsh^2013-08-01^Bing^Milwaukee_kjfheu High Volume^jkdfhdj^T0ncFpv4^^Wisconsin^Chicago^http://ad.jfd.net/clk;256581924;80198650;s;u=ms&sv1=T0ncFpv4&sv2={AdId}&sv3=3392oik17016&sv4={keyword}&sv5={matchtype};?http://www.chicago.buyfjj.com/specials?srchid=|Milwaukee_jefrhjd+High+Volume|buy_a_%2Bfhd^Broad^15^1^2.44
另一个表单(确保行以^结尾):
这是我的解决方案
#!/bin/bash
IFS='^'
while read -ra LINE; do
LINE[1]=$(exec date -d "${LINE[1]}" '+%F')
echo "${LINE[*]}"
done
将其保存到文件并运行bash script.shoutput
示例输出:
+abcd 2013^2013-08-01^Bing^Milwaukee_abcd High Volume^Abcd^izvd4PZo^^Wisconsin^Chicago^http://ad.abcd.net/clk;256581924;80198650;s;u=ms&sv1=izvd4PZo&sv2={AdId}&sv3=3392oik17016&sv4={keyword}&sv5={matchtype};?http://www.chicago.buyacar.com/specials?srchid=|Milwaukee_cdhdf+High+Volume|_%2Berhefn_2013^Broad^5^1^1.47
+sjhrejk models^2013-08-01^Bing^Milwaukee_shdh High Volume^fhekj^9NT23JfC^^Wisconsin^Chicago^http://ad.fhd.net/clk;256581924;80198650;s;u=ms&sv1=9NT23JfC&sv2={AdId}&sv3=3392oik17016&sv4={keyword}&sv5={matchtype};?http://www.chicago.buyhfrkeu.com/specials?srchid=|Milwaukee_djkjfhkd+High+Volume|_%2Bdhk_models^Broad^14^4^5.58
buy a +jkdsh^2013-08-01^Bing^Milwaukee_kjfheu High Volume^jkdfhdj^T0ncFpv4^^Wisconsin^Chicago^http://ad.jfd.net/clk;256581924;80198650;s;u=ms&sv1=T0ncFpv4&sv2={AdId}&sv3=3392oik17016&sv4={keyword}&sv5={matchtype};?http://www.chicago.buyfjj.com/specials?srchid=|Milwaukee_jefrhjd+High+Volume|buy_a_%2Bfhd^Broad^15^1^2.44
另一个表单(确保行以^结尾):
+1 .... 但是你的回答没有解决OP的问题,OP想要
8/10/13
->2013-08-01
而不是2013-08-10
:D:D。。。(我相信这是一个打字错误)哈哈,那么我们可以试试echo 2013-08-01
:)@Dileep-check更新答案。我添加了一个条件来跳过没有日期的行。@fedorqui我不能一次给出多个文件吗?错误:-bash:KeywordsClicksgreaterthan0*.csv:不明确redirect@Dileep不,表达式在。。。做完成
一次只接受一个文件。您可以将我的代码包装在一个更大的块中,使用类似于for file in关键字icksgreaterthan0*.csv;趁。。。做完成<$file;完成
+1。。。。但是你的回答没有解决OP的问题,OP想要8/10/13
->2013-08-01
而不是2013-08-10
:D:D。。。(我相信这是一个打字错误)哈哈,那么我们可以试试echo 2013-08-01
:)@Dileep-check更新答案。我添加了一个条件来跳过没有日期的行。@fedorqui我不能一次给出多个文件吗?错误:-bash:KeywordsClicksgreaterthan0*.csv:不明确redirect@Dileep不,表达式在。。。做完成
一次只接受一个文件。您可以将我的代码包装在一个更大的块中,使用类似于for file in关键字icksgreaterthan0*.csv;趁。。。做完成<$file;完成
。