2012-10-16 234 views
6

awkを使用して文字列から名前と姓の間にあるスペースを削除するにはどうすればよいですか? ほとんどの例は、コマンドラインからawkへのデータのリダイレクトについてですが、awkスクリプト内の文字列を操作する必要があります。私はawkスクリプト内の入力をユーザーに尋ねた文字列変数を持ってawkで文字列から空白を削除する

"stevejohn" 

:に

"steve john" 

はこれを変換します。私はスペースを削除する必要があります。

+1

'awkのfilename' OR'エコー "HI GH" '{$ 1 $ 2を印刷}' | awk '{print $ 1 $ 2}' ' –

+0

シェルスクリプトの作成に関する回答があれば、質問を編集して試した内容を含めてください。 –

答えて

13

gsubはあなたの友人です。次のコマンドは、基本的に正規表現(この場合は1つのスペース)のグローバル置換を実行し、ターゲットの$0(行全体)の空の文字列で置き換えます。

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

あなたはユーザーによって一つの入力を含む、任意のターゲットを使用することができます。

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

使用sed

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

あなたはawkを使用する必要がある場合は、この操作を行います。

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

編集:

:bashスクリプト内

を、あなたはこれを行うことができます

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

私はawkスクリプトの中に入力するようにユーザーに要求した文字列変数を持っています。スペースを削除する必要があります – femchi

+0

私の編集した答えをご覧ください。 –

+0

あなたの変数( "$ s"は$ sではない)を引用することを忘れないでください。そして、あなたは実際にbashでそれを行うための外部コマンドを呼び出さないでしょう、あなたはshell組み込み関数を使うでしょう: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

または "sed"コマンドを使用できます。 sedは、入力から文字列を削除または置換するためによく使用されます。 – trillions

関連する問題