正規表現を区切り文字として使用する awk

正規表現を区切り文字として使用する awk

ファイルから各行の最初の単語を取得したいと思います。残念ながら、多くの行が空白で始まります。だから私は次の最初の単語を取得しようとしました。

awk -F'[ \t]+' '{print $1}' < MyFile.txtしかし、うまくいきません。これを試しましたが、echo " some string: here" | awk -F'[ \t]+' '{print $1}'結果は空行です(空の文字列が印刷されているようです)。では、なぜこれがうまくいかないのですか? awkコマンドで動作させ、区切り文字を明示的に渡したい(教育目的で)。

よろしくお願いします。

ベストアンサー1

少なくともスペースまたはタブで構成される Awk のフィールド区切り文字を指定します。

Awkに文字列を入力 some string: hereして最初のフィールドを印刷するように要求します。

最初のフィールドが空であるため、出力は出ません。

この文字列のフィールドは次のとおりです。

<1:>   <2:some> <3:string:> <4:here>
$ echo '   some string: here' | gawk 'BEGIN {OFS="|";FS="[ \t]+"}{print $1,$2,$3,$4}'
|some|string:|here

カンマで区切られた入力データを使用する方が明白です。

,some,string:,here

区切り文字を指定しないと、Awkは連続したスペースおよび/またはタブを区切り文字として使用します。また、行の両側にスペース文字がある場合いいえ行をフィールドに分割するときに考慮する必要があります。


入力がJSONまたはYAMLの場合は、Awkを使用する代わりに、これらの構造化文書形式を解析するのに適したツールを使用することをお勧めします。これらのツールの提案にはjq、、、yqおよびmlrその他jtcが含まれます。

おすすめ記事