awk - 使用 awk 将每个字符打印为自己的列?

标签 awk

我需要重新组织一个大型 CSV 文件。第一列,目前是 6 位数字,需要拆分,使用逗号作为字段分隔符。

例如,我需要这个:

022250,10:50 AM,274,22,50
022255,11:55 AM,275,22,55

变成了这个:
0,2,2,2,5,0,10:50 AM,274,22,50
0,2,2,2,5,5,11:55 AM,275,22,55

让我知道你的想法!

谢谢!

最佳答案

在 perl 中它要短得多:

perl -F, -ane '$,=","; print split("",$F[0]), @F[1..$#F]' <file>

由于您不了解 perl,请快速解释一下。 -F,表示输入字段分隔符是逗号(如 awk)。 -a激活自动拆分(进入数组 @F ),-n将代码隐式包装在 while (<>) { ... } 中循环,它逐行读取输入。 -e表示下一个参数是要运行的脚本。 $,是输出字段分隔符(它以这种方式设置循环的迭代,但是很好)。 split有明显的目的,你可以看到数组是如何索引/切片的。 print ,当作为这样的参数列出时,使用输出字段分隔符并打印它们的所有字段。

在 awk 中:
awk -F, '{n=split($1,a,""); for (i=1;i<=n;i++) {printf("%s,",a[i])}; for (i=2;i<NF;i++) {printf("%s,",$i)}; print $NF}' <file>

关于awk - 使用 awk 将每个字符打印为自己的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2596186/

相关文章:

linux - Linux中的合并和对齐线

linux - 仅检查 CentOS 服务器上的已用空间

bash - 将输入字段作为数组循环

linux - awk:如何通过awk返回列数?

bash - 查找远程和本地版本号,比较它们,如果更大则下载

linux - awk 第一列中的项目,然后再次 awk 使用第二列中的结果?

regex - 如何在 awk 中生成错误消息列表?

bash - 列出高于特定数字的数字文件

bash - awk 变量不适用于日期 grep

linux - 如何从 linux shell 循环遍历字符串以获得模式?