shell - 在 awk 参数中使用 date 命令
问题描述
我有一个看起来像这样的文件
server1-adm.test.com,/var,dir,29987,2007-12-03 15:52:43,root,root
server2.fs.com,/DATA_File.out,file,299076487,2008-10-15 05:12:23,user1,group1
server3-prd.mod.com,/opt,dir,29987,2009-05-03 00:13:23,user1,group1
server4,/var/tmp/xxz.zip,file,400,2007-12-03 15:52:43,root,root
server1-adm.test.com,/usr,dir,34299876,2006-12-03 16:52:43,root,root
server3-prd.mod.com,/local/home,dir,400,2009-05-03 12:13:23,user2,group1
第 5 列是date + time
我要修改的值。我尝试将多个 awk 语句一起使用,但看起来太混乱了,容易出错。我如何使用date
awk 中的系统命令来转换为以下结果,而不是使用多个语句进行日期格式转换。
server1-adm.test.com,/var,dir,29987,2007-12-03 03:52:43 PM,root,root
server2.fs.com,/DATA_File.out,file,299076487,2008-10-15 05:12:23 AM,user1,group1
server3-prd.mod.com,/opt,dir,29987,2009-05-03 00:13:23 AM,user1,group1
server4,/var/tmp/xxz.zip,file,400,2007-12-03 03:52:43 PM,root,root
server1-adm.test.com,/usr,dir,34299876,2006-12-03 04:52:43 PM,root,root
server3-prd.mod.com,/local/home,dir,400,2009-05-03 12:13:23 PM,user2,group1
行的东西date -d "2007-12-03 15:52:43" +%Y/%m/%d:%H%M%S
。我不知道我们怎样才能让 AM/PMdate
指挥。
我已经有多个 awk 语句作为脚本的一部分一起运行,以对同一个传入文件执行其他文本修改,因此我想使用 awk + date 语句来执行此操作。
解决方案
如果您可以使用 GNU awk
,它会提供一些时间函数,使您的程序运行起来比date
为 CSV 文件的每一行调用 shell + 更快:
awk 'BEGIN { FS = OFS = "," } { gsub("[-:]", " ", $5); $5 = strftime("%F %r", mktime($5)) } 1'
扩展形式:
awk '
BEGIN { FS = OFS = "," }
{
gsub("[-:]", " ", $5)
$5 = strftime("%F %r", mktime($5))
}
1
'
如果您真的想使用外部date
命令,正如您在问题中所述,请使用 GNUawk
协同进程,以便date
在每一行仅启动和重用一个命令:
awk 'BEGIN { FS = OFS = ","; cmd = "stdbuf -oL date -f - +%F\" \"%r" } { print $5 |& cmd; cmd |& getline $5 } 1'
扩展形式:
awk '
BEGIN {
FS = OFS = ","
cmd = "stdbuf -oL date -f - +%F\" \"%r"
}
{
print $5 |& cmd
cmd |& getline $5
}
1
'
但是你真的应该采用第一个解决方案。
推荐阅读
- javascript - React - 使用受控输入将博客文章自动保存到 sessionStorage()
- cookies - Cookie 未添加到请求标头中
- app-inventor - 应用程序发明者问题 - 此块需要一个连接到其套接字的值块
- r - 如何从函数的返回中创建数据框?
- here-api - HERE SDK 中的流量路由
- html - MDL - 如何从输入中删除下划线
- python - 在 tkinter 窗口中显示打开文件的位置名称
- javascript - 下一张幻灯片按钮
- python - 使用 Python 如何从 CI Jenkins 服务器中的 AWS 参数存储中获取数据(每晚运行我的测试)
- google-apps-script - Google App Script - Json 响应解析