2012-04-03 22 views

Respuesta

35

Está imprimiendo el resultado de gsub, pero gsub realiza una modificación in situ de $2 en lugar de devolver una copia modificada. Llamar gsub, luego de impresión:

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

(no tengo suficientes puntos para comentar sobre la respuesta anterior directamente.)

Para recortar espacios en blanco al final de $2 uso:

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

Para recortar espacios en blanco al comenzando de $2 uso:

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

Y para ambos fines y principios:

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

Parece la tercera la línea se puede abreviar como 'awk -F \, '{gsub (/^[\ t] + | [\ t] + $) /," ", $ 2); imprime $ 2 ":"} ''. ¡Tenga en cuenta ese poderoso cartel de tubería! :) – syntaxerror

28

Estas funciones ser útil para mejorar la legibilidad. Ellos también devuelven el resultado recortado:

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 
} 

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

+0

gracias! como dijiste, mi código se vuelve legible. – haper

3

A un trazador de líneas de gawk:

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

ltrim y rtrim en Unix

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

Cuestiones relacionadas