使用 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
让我知道你的想法!
谢谢!
I am in need of reorganizing a large CSV file. The first column, which is currently a 6 digit number needs to be split up, using commas as the field separator.
For example, I need this:
022250,10:50 AM,274,22,50
022255,11:55 AM,275,22,55
turned into this:
0,2,2,2,5,0,10:50 AM,274,22,50
0,2,2,2,5,5,11:55 AM,275,22,55
Let me know what you think!
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Perl 中的内容要短得多:
因为您不了解 Perl,所以快速解释一下。
-F,
表示输入字段分隔符是逗号(如 awk)。-a
激活自动拆分(到数组@F
中),-n
隐式地将代码包装在while 中(
>) { ... }
循环,逐行读取输入。-e
指示下一个参数是要运行的脚本。$,
是输出字段分隔符(它以这种方式获取循环的设置迭代,但是哦,好吧)。split
的目的很明显,您可以看到数组是如何索引/切片的。print
,当像这样列出作为参数时,使用输出字段分隔符并打印其所有字段。在 awk 中:
It's a lot shorter in perl:
Since you don't know perl, a quick explanation.
-F,
indicates the input field separator is the comma (like awk).-a
activates auto-split (into the array@F
),-n
implicitly wraps the code in awhile (<>) { ... }
loop, which reads input line-by-line.-e
indicates the next argument is the script to run.$,
is the output field separator (it gets set iteration of the loop this way, but oh well).split
has obvious purpose, and you can see how the array is indexed/sliced.print
, when lists as arguments like this, uses the output field separator and prints all their fields.In awk:
我认为这可能有效。如果第三个参数是空字符串,则 split 函数(至少在我正在运行的版本中)会将值拆分为单个字符。
I think this might work. The split function (at least in the version I am running) splits the value into individual characters if the third parameter is an empty string.
这是 awk 中的另一种方法
here's another way in awk
这是一个主题的变体。需要注意的一件事是它在不使用循环的情况下打印剩余的字段。另一个问题是,既然您无论如何都要循环第一个字段中的字符,为什么不使用 split() 的空分隔符功能(在某些版本的 AWK 中可能不存在)来执行此操作:
作为脚本:
Here's a variation on a theme. One thing to note is it prints the remaining fields without using a loop. Another is that since you're looping over the characters in the first field anyway, why not just do it without using the null-delimiter feature of split() (which may not be present in some versions of AWK):
As a script: