OFSはいつ変わりますか?

OFSはいつ変わりますか?

OFS 値は、ユーザーまたはユーザー・スクリプトによって設定されない限り、常に空白として表示されます。入力にタブ文字が使用されている場合でも:

$ printf 'one\ntwo\tthree\nfour' | awk '{NF=NF}1' | sed -n l
one$
two three$
four$

ただし、類似変数(ORS)については、次のように言うことがあります。あなたのプラットフォームに合理的な価値を維持するためにORSをそのままにしてください。。一部のプラットフォームでは、デフォルトのORSが\r\n

OFSが直面する問題は次のとおりです。

  • OFSはプラットフォーム間で変更されますか?
  • 空白以外のOFS実装はありますか?

編集者のコメント:私の質問のために混乱を招き申し訳ありません。今明確になることを願っています。

まだ投票できません。

ベストアンサー1

私が(現在)そこに述べたように、ORSは常にデフォルトですが、"\n"WindowsではCの実装(これはawk以外の他の多くのプログラムでも機能します。)ORSで生成されているか、入力時にRSと一致するかにかかわらず、すべての\n文字に対してCR LFとCR LFの間を変換します。\n

同様に、はいOFSのデフォルト値は常に(1)個のスペースです。。 FSのデフォルト値は1スペースですが、特別な処理が適用されます。 FS が 1 空間の場合、どちらか一方がデフォルトです。または明示的に設定すると、フィールドは実際にランダムに分割されます。空のシーケンス(公開している場合はタブが含まれています)。他のすべての単一文字FSはリテラル文字として扱われ、すべての複数文字値は正規表現として扱われます。

したがって、単一の空白または正規表現の場合、レコードはフィールドごとおよび/またはレコードごとに異なる区切り文字に分割できますが、Rebuild $ 0のようにNFまたはフィールドに割り当てると、書き換えられた行は固定値を使用します。すべてのフィールド間のOFS(複数の場合)。また、print x,y,z複数の式を使用する場合(固定)OFSで区切られます。もちろん、OFSを含む場合、またはOFSで構成された文字列式を明示的に印刷する場合、または他の方法で使用する場合は、OFS値が取得されます。

標準RSは単一文字または空の文字列に設定され、「短絡」モードを引き起こす可能性があります。ここで、レコードは 1 つ以上の空行 (連続改行) に分割されます。このモードではデフォルトで分割されます。フィールド一般的な場合を除き、改行文字を使用します。存在する牛に似た一種の栄養awkでのみRSを複数文字の正規表現に設定でき、一致する結果はRTで使用できます。下の要約参照GNUドキュメントのこのページ

おすすめ記事