この例の出力でフィールドがスペースで区切られないのはなぜですか?

この例の出力でフィールドがスペースで区切られないのはなぜですか?

申請時

awk -F'[,/]' '{sub(/\/[0-9]+/, "/" ($2+3) ); print $0}'

入力する

Statements and Functions/399,Black,notBold

なぜ出力

Statements and Functions/402,Black,notBold

変える

Statements and Functions 402 Black notBold

  1. -F'[,/]'awkが入力を読み取れるように、フィールド区切り文字をまたはにFS変更します。,/

    OFSデフォルトは空白です。それでは、print $0すべてのフィールドが区切り文字で連結されて生成されない$1場合はいつですか?$NFOFS$0

  2. 変化

    awk -F'[,/]' '{sub(/\/[0-9]+/, "/" ($2+3) ); print $0}'
    

    到着

    awk -F'[,/]' '{sub(/\/[0-9]+/, "/" ($2+3) ); $1=$1; print $0}'
    

    出力されます

    Statements and Functions 402 Black notBold
    

    入力用

    Statements and Functions/399,Black,notBold
    

    では、(フィールドに割り当てる以外に)どのような状況を$0 再フォーマットで使用できますかOFS

  3. $0型を再指定するためにフィールドを変更する必要がある場合、OFSその理由は何ですか?

    awk -F'[,/]' '{sub(/\/[0-9]+/, "/" ($2+3) ); print $0;  print $2;  print $0}'
    

    入力に適用

    Statements and Functions/399,Black,notBold
    

    出力表示値は?に$2関係なく変更されます。$0OFS

    Statements and Functions/402,Black,notBold
    402
    Statements and Functions/402,Black,notBold
    

ベストアンサー1

awkフィールドを強制的に再フォーマットするには、フィールドが変更されたことを確認する必要がありますOFS$0あなたのように全体を交換する場合は、部品を分割awkして再フォーマットする必要はありません。

状況が変更されたことを受け入れるには、次のようにします。

awk -F'[,/]' '{sub(/\/[0-9]+/, "/" ($2+3) ); $1=$1; print $0}'

これは$1=$1実際に動作します:)

sub()変更されないことに注意してください$2。変更を検索し$0て値で更新します$2+3。ただし、更新されずに$2更新されるため、$0再フォーマットは実行されません。

おすすめ記事