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