web-dev-qa-db-de.com

Wie kann ich Leerzeichen aus einer Variablen in awk entfernen?

Angenommen, $ 2 ist meine Variable. Ich habe versucht aus zu gehen

awk -F\, '{print $2 ":"}'

zu 

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

Aber es geht vom Drucken etwas zum Drucken gar nichts.

24
Hoa

Sie drucken das Ergebnis von gsub, aber gsub nimmt $2 direkt vor, anstatt eine modifizierte Kopie zurückzugeben. Rufen Sie gsub auf und drucken Sie dann:

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

Diese Funktionen sind hilfreich, um die Lesbarkeit zu verbessern. Sie geben auch das getrimmte Ergebnis zurück:

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
} 

Quelle: https://Gist.github.com/andrewrcollins/1592991

29
Jong Bor Lee

(Ich habe nicht genug Punkte, um die vorherige Antwort direkt zu kommentieren.)

Um Leerzeichen am Ende von $2 zu schneiden, verwenden Sie:

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

Um Leerzeichen am Beginn von $2 abzuschneiden, verwenden Sie:

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

Und für Ende und Anfang:

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

Ein Einlage für Gawk:

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

ltrim und rtrim unter Unix

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

1
VIPIN KUMAR

Eine einfachere Option:

Sie müssen die Abgleichfunktion definieren, die gsub als generellen Ersatz verwenden. Dann mit einem Regex finden, ob mit Leerzeichen (ein- oder mehrmals) beginnt oder endet, das Feld zurückgibt. 

   awk -F'|' 'function trim(field){
   gsub(/^ +| +$/,"", field); 
   return field
   }{
   OFS=",";
   print trim($2),trim($3)}' stations > lista.csv

Mit diesem Code wird gerechnet

Und die Datei Stationen hat folgende Struktur:

     1 | UTAR | U de Tarapacá                   
     3 | VALN | Valparaíso                      
     4 | JRGN | Junta Gorgino                   
     6 | TRPD | Torpederas