首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助将“while-do”块转换为“awk”块以加快处理速度

需要帮助将“while-do”块转换为“awk”块以加快处理速度
EN

Stack Overflow用户
提问于 2022-02-23 16:53:55
回答 2查看 115关注 0票数 0

我需要从朱利安(yyddd或yyJJJ)转换为yyyymmdd的csv文件的第7个字段。我有下面的做循环。为了更快地处理,我需要使用awk命令的相同逻辑。有人能帮忙吗?

代码语言:javascript
复制
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}

输入

代码语言:javascript
复制
xx,x,x,xxx,xxxx,xxxxx,021276,x  
xx,x,x,xxx,xxxx,xxxxx,021275,x  
xx,x,x,xxx,xxxx,xxxxx,021275,x  

输出

代码语言:javascript
复制
xx,x,x,xxx,xxxx,xxxxx,20211003,x  
xx,x,x,xxx,xxxx,xxxxx,20211002,x  
xx,x,x,xxx,xxxx,xxxxx,20211002,x  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-23 18:12:03

以下是awk的解决方案。这需要GNU awk作为它的时间函数。它是在终端上测试的,所以它几乎是一条龙命令。

代码语言:javascript
复制
awk 'BEGIN { FS=OFS="," } { $7=strftime("%Y%m%d",mktime("20"substr($7,2,2)" 01 01 00 00 00")+(substr($7,4)*86400)-3600) } 1' filename.txt

解释:

  • FS是字段分隔符。将其设置为","
  • OFS是输出字段分隔符。将其设置为","
  • $7 is 7

时间戳)是一个内置函数,根据format.

  • mktime(datespec)中的规范,以秒为单位格式化时间戳,它是一个将数据转换为秒的函数。数据的格式是YYYY MM DD HH MM SS.
  • substr($7,2,2),是获取两位数的year.
  • substr($7,4),是获取day。因为这些函数以秒作为输入,所以转换到秒是required.
  • 86400是24(小时)* 60 (分钟)*60 (seconds)
  • 36000是一天。60 (分钟)* 60 (秒)
  • 1用于打印输入行。不一定是1。除零以外的任何东西都可以。如果您喜欢RPG,您可能希望将其更改为999.
  • filename.txt是您的输入文件.
票数 2
EN

Stack Overflow用户

发布于 2022-02-23 17:02:47

仅仅消除对cut的所有调用就会产生奇妙的效果;您可能不需要awk

代码语言:javascript
复制
count=0
while IFS=, read -r c1 c2 c3 c4 c5 c6 c7 col_8 rest; do
    col_7=${c7:3:3}
    year1=${c7:1:2}
    col_1=$c1$c2$c3$c4$c5$c6
    col_8=$c8
    date7=$(date -d "01/01/$year1 +$col_7 days - 1 day" +%Y%m%d)
    ...
    count=$((count+1))
done < "$t1"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71241036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档