
申請時
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
?
-F'[,/]'
awkが入力を読み取れるように、フィールド区切り文字をまたはにFS
変更します。,
/
OFS
デフォルトは空白です。それでは、print $0
すべてのフィールドが区切り文字で連結されて生成されない$1
場合はいつですか?$NF
OFS
$0
変化
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
?$0
型を再指定するためにフィールドを変更する必要がある場合、OFS
その理由は何ですか?awk -F'[,/]' '{sub(/\/[0-9]+/, "/" ($2+3) ); print $0; print $2; print $0}'
入力に適用
Statements and Functions/399,Black,notBold
出力表示値は?に
$2
関係なく変更されます。$0
OFS
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
再フォーマットは実行されません。
答え2
以下を使用すると、より良いサービスを受けることができると思います。
awk -F'[,/]' '{$2=($2+3)}1' infile
infile は次のようになります。
$ cat infile
The Ubiquitous Backslash/49,Black
The Ubiquitous Backslash/17,Black
Statements and Functions/399,Black,notBold
あなたは得るでしょう:
$ awk -F'[,/]' '{$2=($2+3)}1' infile
The Ubiquitous Backslash 52 Black
The Ubiquitous Backslash 20 Black
Statements and Functions 402 Black notBold
ファタイ