2014-04-16 25 views
1

所以基本上我有一個文件與管道分隔線,我想剪切字段的內容,當他們超過一定的長度,所以我已經設置了一個最大長度爲每個領域。 我使用陣列以存儲每個字段的最大長度值:使用索引數組作爲gawk輸入數據的格式映射

gawk -F"|" -- ' 

BEGIN { 
    map[1]=10 
    map[2]=20 
    map[3]=60 
    map[4]=60 
    map[5]=3 
    map[6]=60 
    map[7]=3 

    OFS="|" 
} 

{ 
    for(i = 1; i <= NF; i++) { 
     if (length($i) > map[$i]) { 
     $i = substr($i, 1, map[$i]) 
     } 
    } 
    print; 
} 
' 

這裏的問題是,有一些錯誤的陣列,該項目全部返回null或0,使所有比較if (length($i) > map[$i])返回true,它將清空所有字段, 我的數組有什麼問題?

回答

2

更改(length($i) > map[$i])(length($i) > map[i])substr($i, 1, map[$i])substr($i, 1, map[i])

像這樣:

gawk -F"|" -- ' 

BEGIN { 
    map[1]=10 
    map[2]=20 
    map[3]=60 
    map[4]=60 
    map[5]=3 
    map[6]=60 
    map[7]=3 

    OFS="|" 
} 

{ 
    for(i = 1; i <= NF; i++) { 
     if (length($i) > map[i]) { 
     $i = substr($i, 1, map[i]) 
     } 
    } 
    print; 
} 
' 

$i是指場數i的內容,但字段的內容是map索引。

+0

完成,現在運行它,讓我們看看:) thx – JBoy