需要帮助将“while-do”转换为“while-do”块到“awk”;块以加快处理速度
我需要将 csv 文件的第 7 个字段从 julian(yyddd 或 yyJJJ)转换为 yyyymmdd。我有下面的 while do 循环。我需要使用 awk 命令相同的逻辑来加快处理速度。有人可以帮忙吗?
count=0
while read -r line1; do
col_7=$( echo $line1 | cut -d ',' -f7 | cut -c4-6)
year1=$( echo $line1 | cut -d ',' -f7 | cut -c2-3)
echo $col_7
col_1=$( echo $line1 | cut -d ',' -f1,2,3,4,5,6)
col_8=$( echo $line1 | cut -d ',' -f8 )
date7=$(date -d "01/01/${year1} +${col_7} days -1 day" +%Y%m%d)
echo $date7
echo $col_1,$date7,$col_8 >> ${t2}
count=$[count+1]
done < ${t1}
输入
xx,x,x,xxx,xxxx,xxxxx,021276,x
xx,x,x,xxx,xxxx,xxxxx,021275,x
xx,x,x,xxx,xxxx,xxxxx,021275,x
输出
xx,x,x,xxx,xxxx,xxxxx,20211003,x
xx,x,x,xxx,xxxx,xxxxx,20211002,x
xx,x,x,xxx,xxxx,xxxxx,20211002,x
I need 7th field of a csv file converted from julian(yyddd or yyJJJ) to yyyymmdd. I have the below while do loop. I need the same logic using awk command for quicker processing. Can someone help ?
count=0
while read -r line1; do
col_7=$( echo $line1 | cut -d ',' -f7 | cut -c4-6)
year1=$( echo $line1 | cut -d ',' -f7 | cut -c2-3)
echo $col_7
col_1=$( echo $line1 | cut -d ',' -f1,2,3,4,5,6)
col_8=$( echo $line1 | cut -d ',' -f8 )
date7=$(date -d "01/01/${year1} +${col_7} days -1 day" +%Y%m%d)
echo $date7
echo $col_1,$date7,$col_8 >> ${t2}
count=$[count+1]
done < ${t1}
Input
xx,x,x,xxx,xxxx,xxxxx,021276,x
xx,x,x,xxx,xxxx,xxxxx,021275,x
xx,x,x,xxx,xxxx,xxxxx,021275,x
Output
xx,x,x,xxx,xxxx,xxxxx,20211003,x
xx,x,x,xxx,xxxx,xxxxx,20211002,x
xx,x,x,xxx,xxxx,xxxxx,20211002,x
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只要消除所有对
cut
的调用就会产生奇迹;您可能不需要awk
。Just eliminating all the calls to
cut
will do wonders; you may not needawk
.这是 awk 的解决方案。这需要 GNU awk 来实现其时间函数。在终端上测试了它,所以它几乎是一个单行命令。
说明:
YYYY MM DD HH MM SS
。日期
。由于这些函数以秒为输入,因此需要转换为秒。999
。Here is a solution for
awk
. This requires GNU awk for its time functions. Tested it on terminal, so it is pretty much a one-liner command.Explanations:
YYYY MM DD HH MM SS
.day
. Because these functions take seconds as input, so a convertion to seconds is required.999
.