我有一个文件,其中的记录不用任何分隔符分隔。下面分享了一个示例:
XXXXXYYYYZZZ
XXXXXYYYYZZZ
XXXXXYYYYZZZ
XXXXXYYYYZZZ
XXXXXYYYYZZZ
我已经得到了文件的DDL,即字段1位于位置1-5,字段2位于位置6-9,字段3位于位置10-12
如何使用awk命令打印以下输出?
field1、field2、field3
XXXXX、YYYY、ZZZ
XXXXX、YYYY、ZZZ
XXXXX、YYYY、ZZZ
XXXXX、YYYY、ZZZ
XXXXX、YYYY、ZZZ
发布于 2017-05-04 20:16:49
在GNU awk中使用FIELDWIDTHS
$ awk '
BEGIN {
FIELDWIDTHS="5 4 3" # here you state the field widths
OFS="," # output field separator
print "field1","field2","field3" } # print header in BEGIN
{
print $1,$2,$3 } # print 3 first fields, you could also:
' file # {$1=$1; print} or even:
field1,field2,field3 # {$1=$1}1
XXXXX,YYYY,ZZZ
XXXXX,YYYY,ZZZ
XXXXX,YYYY,ZZZ
XXXXX,YYYY,ZZZ
XXXXX,YYYY,ZZZ
如果您没有GNU awk,请使用f1=substr($0,1,5);f2=substr($0,6,4)...print f1,f2,f3
。
编辑:
$ awk '
BEGIN {
OFS=","
print "field1","field2","field3" }
{
f1=substr($0,1,5)
f2=substr($0,6,4)
f3=substr($0,10,3)
print f1,f2,f3 }
' file
后者作为插入了;
的一行程序:
$ awk 'BEGIN {OFS=","; print "field1","field2","field3"}{f1=substr($0,1,5); f2=substr($0,6,4); f3=substr($0,10,3); print f1,f2,f3}' file
前者作为一行程序:
$ awk 'BEGIN{FIELDWIDTHS="5 4 3"; OFS=","; print "field1","field2","field3"}{print $1,$2,$3}' file
发布于 2020-09-28 17:48:17
这可能适用于您(GNU sed):
sed -e '1i\field1,field2,field3' -e 's/[^,]/,&/6;s//,&/10' file
https://stackoverflow.com/questions/43782220
复制相似问题