【发布时间】:2020-07-17 17:24:17
【问题描述】:
我有一个包含 6 列的 .csv 文件:
source raised_time cleared_time cause pcause sproblem
source1 rtime1 ctime1 cause1 communicationsSubsystemFailure#model.route.1.2 oMCIFailure#model.route.1.2
source2 rtime2 ctime2 cause2 equipmentMalfunction#model.route.1.2 deviceNotActive#model.route.1.2
我想使用以下规则操作 .csv 文件的第 5 列和第 6 列:
- 将第 5 列和第 6 列的第一个字母转换为大写
- 将字符串保留为字符:“#”并删除尾随部分(在 # 字符之后)
- 在小写字母和大写字母之间留一个空格
所以想要的格式是:
source raised_time cleared_time cause pcause sproblem
source1 rtime1 ctime1 cause1 Communication Subsystem Failure OMCI Failure
source2 rtime2 ctime2 cause2 Equipment Malfunction Device Not Active
如何使用 awk 或 sed 命令来做到这一点?
我尝试使用以下命令将第一个字母转换为大写:
awk 'BEGIN {$5 = toupper(substr($5,1,1))
substr($5, 2)}1' input_file
但它不起作用。
【问题讨论】:
-
您的描述将导致输出
O M C I Failure。你想如何处理那些(显然)不需要的空间。 -
您搜索了什么,找到了什么?您尝试过什么,它是如何失败的?
-
@tripleee,我尝试使用以下命令将第一个字母转换为大写:“awk 'BEGIN {$5 = toupper(substr($5,1,1)) substr($5, 2 )}1' input_file" 但它不起作用。
-
@WilliamPursell,是的,你是对的。也许我应该像这样编辑规则:在小写字母和大写字母之间留一个空格。
-
如果不是现在,以后您会后悔将本来应位于一列中的数据分解为任何列的不可知的 0-n 空格。我建议转换为
Equipment_Malfunction(使用下划线,而不是空格)。以这种格式存储您的数据,如果您有不理解下划线的挑剔用户,那么sed 's/_/ /g' file > report_version.txt将在他们的报告中为他们提供他们想要的内容,并且您仍然会有一个常规数据集,即。$1,$2,$3,$4,$5。祝你好运。
标签: awk sed data-manipulation