2017-05-04 54 views
-1

我有一個文件,記錄中沒有任何分隔符分隔。示例如下共享:使用awk將記錄分割成多個字段

XXXXXYYYYZZZ
XXXXXYYYYZZZ
XXXXXYYYYZZZ
XXXXXYYYYZZZ
XXXXXYYYYZZZ

我被賦予了DDL的文件,使得場1之處在於位置1-5,場2位於位置6-9,位置3位於位置10-12

如何使用awk命令打印下面的輸出?

FIELD1,FIELD2,字段3
XXXXX,YYYY,ZZZ
XXXXX,YYYY,ZZZ
XXXXX,YYYY,ZZZ
XXXXX,YYYY,ZZZ
XXXXX,YYYY,ZZZ

+1

開始與格式化你的描述,現在它是不可讀的 – RomanPerekhrest

+0

Possib le [awk FIELDWIDTHS WORK]如何重複(http://stackoverflow.com/questions/36085137/how-does-awk-fieldwidths-work) –

+0

字段長度可以變化。這只是一個例子。我的文件可以有超過50列的字段1位可以是1-10,字段2可以是11-15和兒子。此外,我需要如圖所示的標題輸出。請幫助 –

回答

1

IN 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 

後者作爲一個內膽採用; s前插入:

$ 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 
+1

我試過awk'BEGIN {f1 = substr($ 0,1,5); f2 = substr($ 0,6,4); f3 = substr($ 0,10,3)print「field1」,「field2」,「field3 「} {print f1,f2,f3}'文件---它沒有工作@james –

+1

awk'BEGIN {FIELDWIDTHS =」5 4 3「OFS =」,「print」field1「,」field2「,」field3「} {print $ 1,$ 2,$ 3}'file'-- @james它沒有工作。說語法錯誤 –

+0

顯然你沒有GNU awk,給我一秒,我會編輯後者作爲完整答案。 –