使用sed
or awk
,是否可以在视觉上对齐 CSV 文件中的列?
例如:
例如来自:
a,b,c,some stuff,"some, other, stuff",d,2023-03-10 18:37:00
y,x,z,t,cool,thing,2022-04-12 21:44:00
到:
a, b, c, some stuff,"some, other, stuff", d, 2023-03-10 18:37:00<EOL>
x, y, z, t, cool, thing, 2022-04-12 21:44:00<EOL>
有一些双引号字段包含文本和逗号。
我尝试column
了bsdmainutils
一下,但显然无法处理此类数据。
这种类型的 CSV 文件:
因为您正在修改字段,所以不再是同一个数据文件。解析时,由于上面的宽度,原来的内容
"t"
现在将解析出来(除非您使用正则表达式来解析非标准分隔符。)" t"
"some stuff"
,[variable space]
您可以在所有字段上强制加引号以获得更清楚地显示这些新字段的 csv 文件。这是一个 Ruby 来做到这一点:
印刷:
或者,如果您真的想要引用和未引用的字段,您可以执行以下操作:
印刷:
它还处理字段中令人讨厌的转义引号。鉴于:
第二个版本打印:
那就忘掉简单的文本解析吧。只需获取可以解析复杂 CSV 的东西,然后让它进行漂亮的打印。
米勒是首选工具。您可以指定“漂亮的打印”作为输出格式:
您也可以只使用 Python 的内置
csv
模块:使用 GNU awk
FPAT
和 2 pass 方法:或者,使用任何 awk 的相同方法,您只需要自己编写代码,使用循环调用将每条记录拆分为字段,
match()
并将FPAT
这些字段存储在数组中,而不是上面的 gawk 作为普通字段的一部分为您做的拆分:您可以将整个输入存储在内存中,然后将其全部打印在 END 部分,而不是读取输入两次,其优点是它可以处理来自管道的输入,缺点是如果您的输入会失败输入文件太大,内存放不下。这是它的 GNU awk 版本:
和任何 awk 版本: