已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。
17天前关闭
Improve this question
我有一个来自导出的1900行csv列表,看起来像这样:
date,time,ampm
01/01/2024,3:43:19,pm
01/01/2024,3:43:19,am
字符串
我正在尝试循环一个if语句,它基本上说:
if [[ third csv entry = pm ]]; then
second csv entry numbers between , and : += 12
print modified line
else
print original line
fi
型
导致
date,time,ampm
01/01/2024,15:43:19,pm
01/01/2024,3:43:19,am
型
这看起来像是bash中的噩梦,但这是我所知道的最有效的使用方法。我对python的了解还不够,无法使用它。我也愿意接受其他建议。
4条答案
按热度按时间ibrsph3r1#
这里有一种使用GNUsed的方法,在替换命令中使用
e
标志,该命令将模式空间作为shell命令执行。字符串
2,$
是用来单独留下标题行的。y/,/ /
将所有逗号替换为空格。替换命令将该行重新格式化为
date
命令,如下所示型
其中,
-d
参数现在采用date
理解的格式,+...
部分将输出格式化为所需的输出。结果:
型
zpgglvta2#
关于perl
个字符
这避免了为每一行调用
date
。Time::Piece日期时间解析器很挑剔:输入字符串必须与预期的格式完全匹配,这就是我必须添加前导零的原因。
使用bash,我会写:
型
xxe27gdn3#
添加一些示例以覆盖
12:xx:xx am/pm
:字符串
一个
awk
的想法:型
这产生:
型
ktecyv1j4#
这里有一个在bash中使用循环逐行阅读的方法
字符串
结果如下
型