2010-04-12 41 views
0

我在從數據庫中導出的文本文件中有一個字段。該字段包含地址,但有時它們很長,數據庫允許它們包含多行。在導出時,換行符被替換爲這樣的美元符號:高效地分割字段中的元素

first part of very long address$second part of very long address$third part of very long address 

並非每個地址都有多行,並且地址不超過三行。每條線的長度是可變的。

我正在將數據導入用於郵件合併的MS Access中。我想分割$符號上的字段,如果它在那裏,但如果該字段只包含1行,我想將我的兩個額外的輸出字段設置爲零長度的字符串,以便我不會在地址中留白當它被打印。

我有一個awk文件在文本文件中的所有其他數據上正常工作,但我需要得到最後一點工作。我嘗試了下面的代碼。除了在else處出現語法錯誤這一事實,我不確定這是做我想做的事情的好方法。這是在Windows上用gawk完成的。編號: 對不起,對不起,下面是一個樣本

HEADER|0000000130|0000527350|0000171250|0000058000|0000756600|0000814753|0000819455|100106 
rec1|ILL/COLORADO COLLEGE$TUTT LIBRARY|1021 N CASCADE$COLORADO SPRINGS, CO 80903| 
rec2|ILL /PIKES PEAK LIBRARY DISTRICT|20 N. CASCADE AVE./PO BOX 1579$COLORADO SPRINGS, CO 80903| 
rec3|DOE,JOHN|PO Box 8034| 
rec4|ILL/GEORGIA INSTITUTE OF TECHNOLOGY|INFORMATION DELIVERY DEPT$704 CHERRY ST$ATLANTA, GA 30332-0900 

我只匹配沒有HEADER的行。我需要拆分$符號上的文本字符串。管道之間的字符串不應該填充(這就是爲什麼我試圖在我的原始代碼中獲取長度)。對於這個例子,有6個輸出字段,沒有數據的任何字段只是一個空字符串(也是我在代碼中試圖做的)。

rec1|ILL/COLORADO COLLEGE|TUTT LIBRARY|1021 N CASCADE|COLORADO SPRINGS, CO 80903|| 
rec2|ILL /PIKES PEAK LIBRARY DISTRICT||20 N. CASCADE AVE./PO BOX 1579|COLORADO SPRINGS, CO 80903|| 
rec3|DOE,JOHN||PO Box 8034||| 
rec4|ILL/GEORGIA INSTITUTE OF TECHNOLOGY||INFORMATION DELIVERY DEPT|704 CHERRY ST|ATLANTA, GA 30332-0900| 

希望幫助!讓我知道如果這仍然不明確。

+0

它更好地顯示您輸入數據的清晰示例,然後顯示您所需的輸出。 – ghostdog74 2010-04-12 15:54:50

回答

0
BEGIN { FS = "|" } 
$1 != "HEADER" { 
    for(i = gsub(/\$/, "\t", $6); i < 3; i++) 
     $6 = $6 "\t" 
    print $6 
} 

我真的不確定我是否有正確的要求。