2017-02-06 20 views
1

フィールドセパレータFSを正規表現awkで参照できるかどうかは、式の本体で可能ですか?フィールドセパレータは、行の最初の列にあるときFSを正規表現で使用するには?

awk -F: '/^FS/{print FS}' 

答えて

5

内部/ / - FSも例外ではありません。

あなたのスクリプトは、正規表現に文字列を変換することができます~を使って書くことができます

awk -F: '$0 ~ "^" FS { print FS }' 
+0

これを追加したかっただけです。確かに、それは行うことができます。 – hek2mgl

+0

一つの制限:少なくともPOSIXの 'awk'が必要です。古いSolarisのawkは動作しません。しかし、 '/ usr/xpg4/bin/awk'は動作します。 – ceving

+0

@cevingあなたは、古い、壊れたawk(Solarisの/ bin/awk)が何をすることができるかどうかは言及していません。それは古くて壊れていて、それをやめるためにそれを使っている人々に伝えることとは別に、完全に無視されなければならない。すべての該当する回答に「古い、壊れたawkを除いて」という警告を追加した場合、ほぼすべての回答に追加されます。 –

1

は、NF1より大きく、最初のフィールドでなければならないゼロの長さを持っている:あなたは任意の変数を使用することはできません

awk -F: 'NF>1 && !(length($1)) {print FS}' 
+0

私はちょうど簡単な例を使用していました。私は '{{':'}}'としてコロンを書く必要があるAnsibleプレイブックに埋め込まれたシェルスクリプトにこれを必要とします。 Unixファイルで動作する 'awk'スクリプトを書くことは、この制限を伴う純粋な苦痛です。 '{{':'}} 'の代わりに各コロンに' FS'を使うのは少し苦痛です。 – ceving

+0

? XY問題のように見えます。最初に '{{':'}}'と書くのはどうですか? – hek2mgl

+0

[ここ](http://stackoverflow.com/q/24835706/402322)を参照してください。一つのコメントに 'awk'の例があります。これはYAMLの構文上の問題です。 – ceving

関連する問題