将固定宽度的文件从文本转换为csv

Ash*_*ish 9 linux csv awk gawk export-to-csv

我有一个文本格式的大型数据文件,我想通过指定每个列长度将其转换为csv.

列数= 5

列长

[4 2 5 1 1]
Run Code Online (Sandbox Code Playgroud)

样本观察:

aasdfh9013512
ajshdj 2445df
Run Code Online (Sandbox Code Playgroud)

预期产出

aasd,fh,90135,1,2
ajsh,dj, 2445,d,f
Run Code Online (Sandbox Code Playgroud)

Tho*_*hor 23

GNU awk(gawk)直接支持这一点FIELDWIDTHS,例如:

gawk '$1=$1' FIELDWIDTHS='4 2 5 1 1' OFS=, infile
Run Code Online (Sandbox Code Playgroud)

输出:

aasd,fh,90135,1,2
ajsh,dj, 2445,d,f
Run Code Online (Sandbox Code Playgroud)

  • 太好了!我不知道这个功能.大+1!相关链接:[读取固定宽度数据](http://web.mit.edu/gnu/doc/html/gawk_5.html#SEC27) (3认同)

fed*_*qui 5

我将使用sed并捕获具有给定长度的组:

$ sed -r 's/^(.{4})(.{2})(.{5})(.{1})(.{1})$/\1,\2,\3,\4,\5/' file
aasd,fh,90135,1,2
ajsh,dj, 2445,d,f
Run Code Online (Sandbox Code Playgroud)