2017-06-14 1 views
0

私はと呼ばれるファイルに上記の行を保存しているawkを使用してカンマを無視するにはどうすればよいですか?私はAWKを使用して、コンマを分離するにはどうすればよい

1, servername, url, Properties, hostname, version, os, application server. 

の下test.propertiesし、次のコマンド

awk '{ print $1 }' test.properties 

と私だけを使用してサーバー名を出力に出力する代わりに、行全体を出力します。

このような状況では代わりにカットを使用する必要がありますか?

+0

コンマ 'のawk -Fにフィールド区切りに変更し、「あなたの例では、行全体を印刷した場合はawkが壊れているとして、あなたははるかに大きな問題を持っている – 123

+0

をyadayada''。あなたの入力例は '1'(引用符なし)と表示されるはずです。私は提供されたソリューションのいずれかを見る前にそれを再インストールすることをお勧めします – grail

答えて

1

を考える:あなたが言うように、cutを使用し、

$ echo "$txt" | awk -F, '{print $1}'  
1 

または::

$ echo "$txt" | cut -d , -f1  
1 
+0

ありがとうございました。フィールドセパレータを使用しようとしましたが、間違っています。ここで私がawk -F '、' '{print $ 1}'を行ったのは 〜 – SGR29

+0

引用符で囲まれた単一文字のBashismは 'awk -F $ '、''ですが、この場合は引用する必要はありません。 – dawg

+0

@dawgは、あなたが特別な理由がない限り、常にあなたの文字列を引用し、二重を必要としない限り、一重引用符を使用します。引用符は、必要なときに追加するものではなく、必要なときに削除するものです**。 awkはコマンドラインで変数を設定するときにエスケープシーケンスを解釈するので、 'FS'を設定するときには、どんなbashismsも必要ありません。 @ SGR29が 'awk -F 'で持っていたもの、' ... 'がそのコードを書ける最善の方法であり、それがうまくいかなかった場合は、なぜその理由を調査しながら彼の価値があるでしょう。 –

0

はい、このような状況ではカットを使用する必要があります。これはそのために設計されたものです。

+0

ありがとうEd。いつcut vs awkを使用するのか、なぜそれを教えてもらえますか?ご回答いただきありがとうございます。 – SGR29

+0

1文字の区切り文字を使用して、入力で発生したのと同じ順序でフィールドを印刷する場合は、 'cut'を使用します。それ以外は 'awk'を使います。その理由は、簡潔さと効率性です。 –

-2

あなたはまた、使用することができ

$ echo "$txt" 
1, servername, url, Properties, hostname, version, os, application server 

ただコンマに適切にフィールドセパレータを設定しますあなたの文字列にバックスラッシュ(\)以外のASCII 0x20-0x7fの文字しか含まれていない場合は、bash組み込み関数0x5c(シェル変数を扱うについてStéphane Chazelas言及警告に注意):

s='1, servername, url, Properties, hostname, version, os, application server' 
IFS=', ' read _ server _ <<<"$s" 
echo "'$server'" 

出力:

'servername' 

や位置パラメータを用いて:

oIFS="$IFS" 
export IFS=', ' 
set -- $s 
echo $2 
IFS="$oIFS" 

または:

function getserver() (
    export IFS=', '; set -- $1; echo $2 
) 
getserver "1, servername, url, Properties, hostname, version, os, application server" 

出力:

servername 
関連する問題