2012-04-03 6 views

cevap

35

gsub sonucunu yazdırıyorsunuz, ancak gsub değiştirilmiş bir kopya yerine $2 yerinde bir değişiklik yapıyor. Ardından baskı gsub Çağrı:

awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}' 
14

(doğrudan önceki cevabı hakkında yorum yapmak yeterli puanı yok.)

sonu $2 kullanım de boşluk kırpmak için:

awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}' 

$2 kullanım başlayan de boşluk kırpmak için:

Ve sonunda ve başında her ikisi için:

awk -F\, '{gsub(/^[ \t]+/, "", $2); gsub(/[ \t]+$/, "", $2); print $2 ":"}' 
+1

yılında RTRIM üçte görünüyor Onlar da kesilmiş sonucu döndüren satır 'awk -F \,' {gsub (/^[\ t] + | [\ t] + $) /, "", $ 2) olarak kısaltılabilir; 2 $ yazdır: "" ". Güçlü boru işaretine dikkat et! :) – syntaxerror

28

Bu işlevler okunabilirliği artırmak için kullanışlı.

function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s } 
function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s } 
function trim(s) { return rtrim(ltrim(s)); } 
BEGIN { 
# whatever 
} 
{ 
# whatever 
} 
END { 
# whatever 
} 

Kaynak: https://gist.github.com/andrewrcollins/1592991

+0

teşekkürler! dediğin gibi, kodum iyi okunabilir hale geldi. – haper

3

Tek gawk'da için astar:

gawk -F\, '{$2 = gensub(/^[ \t]*|[ \t]*$/,"","g",$2)}' 
1

ltrim ve Unix

awk 'BEGIN{FS=OFS="|"} {gsub(/^[ \t]+|[ \t]+$/, "", $2)}1' filename.txt