2012-10-16 12 views
6

Wie kann ich ein Leerzeichen zwischen Name und Nachname aus einer Zeichenfolge entfernen, indem Sie awk verwenden? In den meisten Beispielen geht es um das Umleiten von Daten von der Befehlszeile zu awk, aber ich muss eine Zeichenfolge in einem awk-Skript bearbeiten.Entfernen eines Leerzeichens aus einer Zeichenfolge durch awk

umrechenen:

"steve john" 

zu:

"stevejohn" 

Ich habe einen String-Variable, die ich Benutzer zur Eingabe innerhalb eines awk-Skript gefragt. Ich muss die Leerzeichen entfernen.

+1

'awk '{print $ 1 $ 2}' filename' OR' echo "hallo gh" | awk '{print $ 1 $ 2}' ' –

+0

Wenn Sie eine Antwort zum Erstellen von Shell-Skripts haben, bearbeiten Sie Ihre Frage bitte, um einzuschließen, was Sie versucht haben. –

Antwort

13

gsub ist dein Freund. Der folgende Befehl führt im Prinzip eine globale Ersetzung eines regulären Ausdrucks (in diesem Fall ein einzelnes Leerzeichen) durch Ersetzung durch eine leere Zeichenfolge auf dem Ziel $0 (die gesamte Zeile) durch.

pax> echo "steve john" | awk '{ gsub (" ", "", $0); print}' 
stevejohn 

Sie können eine beliebige Ziel verwenden, einschließlich einer Eingabe durch einen Benutzer:

pax> awk 'BEGIN {getline xyzzy ; gsub(" ","", xyzzy) ; print xyzzy}' 
hello there my name is pax 
hellotheremynameispax 
3

Verwendung sed: Das

$ echo "steve john" | sed 's/ //g' 
stevejohn 

Wenn Sie awk verwenden müssen, tun:

$ echo "steve john" | gawk '{print $1 $2}' 
stevejohn 

Edit:

In einem Bash-Skript, können Sie dies tun:

s="steve john" # user input 
t=$(echo $s | gawk '{print $1 $2}') 
echo $t 
+0

Ich habe eine String-Variable, die ich Benutzer aufgefordert, in einem awk-Skript einzugeben. Ich muss die Leerzeichen entfernen – femchi

+0

Bitte sehen Sie meine bearbeitete Antwort. –

+0

Denken Sie daran, Ihre Variablen ("$ s" nicht $ s) zu zitieren, und Sie würden nicht wirklich einen externen Befehl aufrufen, um dies in bash zu tun, würden Sie die Shell-Builtins verwenden: s = "steve john"; echo "$ {s //}" stevejohn –

1
echo "john smith aaa " |\ 
awk 'BEGIN {FS=" "; OFS=""} {for(i=1;i<=NF;++i) {out = out OFS $i}} END {print out;}' 
+0

oder Sie können den Befehl "sed" verwenden. sed wird häufig verwendet, um Strings aus der Eingabe zu entfernen oder zu ersetzen. – trillions

Verwandte Themen