awk - 使用 sed、awk 或其他在 Linux 命令行中从文本文件生成 csv
问题描述
我有一个包含数千行的文件,我想将其作为 csv 文件,以供以后处理。
原始文件如下所示:
cc_1527 (ILDO_I173_net9 VSSA) capacitor_mis c=9.60713e-16
cc_1526 (VDD_MAIN Istartupcomp_I115_G7) capacitor_mis \
c=4.18106e-16
cc_1525 (VDD_MAIN Istartupcomp_I7_net025) capacitor_mis \
c=9.71462e-16
cc_1524 (VDD_MAIN Istartupcomp_I7_ST_net14) \
capacitor_mis c=4.6011e-17
cc_1523 (VDD_MAIN Istartupcomp_I7_ST_net15) \
capacitor_mis c=1.06215e-15
cc_1522 (VDD_MAIN ILDO_LDO_core_Istartupcomp_I7_ST_net16) \
capacitor_mis c=1.37289e-15
cc_1521 (VDD_MAIN ILDO_LDO_core_Istartupcomp_I7_I176_G4) capacitor_mis \
c=6.81758e-16
这里的问题是,有些行继续到下一行,用符号“\”表示。
原始文本前 5 行的最终 csv 格式应为:
cc_1527,(ILDO_I173_net9 VSSA),capacitor_mis c=9.60713e-16
cc_1526,(VDD_MAIN Istartupcomp_I115_G7),capacitor_mis,c=4.18106e-16
cc_1525,(VDD_MAIN Istartupcomp_I7_net025),capacitor_mis,c=9.71462e-16
因此,现在所有内容都在一行中,并且“\”字符已被删除。
请注意,每行的开头可能存在空格,因此应在完成任何其他操作之前修剪这些空格。
关于如何实现这一点的任何想法。?
提前致谢。
最好的问候,佩德罗
解决方案
使用 sed 的一些比较晦涩的特性(它可以做的不止s///
):
$ sed -E ':line /\\$/ {s/\\$//; N; b line}; s/[[:space:]]+/,/g' demo.txt
cc_1527,(ILDO_I173_net9,VSSA),capacitor_mis,c=9.60713e-16
cc_1526,(VDD_MAIN,Istartupcomp_I115_G7),capacitor_mis,c=4.18106e-16
cc_1525,(VDD_MAIN,Istartupcomp_I7_net025),capacitor_mis,c=9.71462e-16
cc_1524,(VDD_MAIN,Istartupcomp_I7_ST_net14),capacitor_mis,c=4.6011e-17
cc_1523,(VDD_MAIN,Istartupcomp_I7_ST_net15),capacitor_mis,c=1.06215e-15
cc_1522,(VDD_MAIN,ILDO_LDO_core_Istartupcomp_I7_ST_net16),capacitor_mis,c=1.37289e-15
cc_1521,(VDD_MAIN,ILDO_LDO_core_Istartupcomp_I7_I176_G4),capacitor_mis,c=6.81758e-16
基本上:
将一行读入模式空间。
:line /\\$/ {s/\\$//; N; b line}
:如果模式空间以 a 结尾\
,请删除该反斜杠,读取下一行并将其附加到模式空间,然后重复此步骤。s/[[:space:]]+/,/g
: 将 1 个或多个空格字符的每个大小写转换为单个逗号。打印结果,然后换行回到开头。
推荐阅读
- python - 如何使用 PySpark 将 JSON 单元格值转换为 Dataframe?
- python - 在 Seaborn 和 Barplot 中使用预先计算的误差线
- signals - Windows 中支持哪些信号以及如何在 python 中捕获和处理它们?
- bison - 将参数传递给 yylex
- dll - 即使库链接,DLL 也会被忽略
- ruby-on-rails - NameError 未初始化常量 MyWorker::MyController
- android - 我可以在布局中添加仅在设计预览中可见的视图吗?
- amazon-web-services - 如何在见解查询中按其值拆分 Cloudwatch 字段
- anylogic - Anylogic 错误:无法从人口转换为资源池
- ios - viewDidLayoutSubviews & UIApplicationDidBecomeActive 通知