最後にcountを追加した後、文字列データ型の位置が変わることが観察されました。
awk '$2=="H" {x = substr($3,1,4); next} {$(NF+1) = x} 1'
入力する:
12 H 0003A
12305245D 2500 AB 5454 87870001A
12305245D 2500 ABC 5454 87870002A
12305245D 2500 ABCD 5454 87870003A
予想出力:
12 H 0003A
12305245D 2500 AB 5454 87870001A 0003
12305245D 2500 ABC 5454 87870002A 0003
12305245D 2500 ABCD 5454 87870003A 0003
実際の出力:
12 H 0003A
12305245D 2500 AB 5454 87870001A 0003
12305245D 2500 ABC 5454 87870002A 0003
12305245D 2500 ABCD 5454 87870003A 0003
答え1
セットフィールド区切り文字を空の文字列として使用して、-F ''
各文字を別々のフィールドとして扱うようにawkに指示します。$
同じいいえ同じですH
($3
指定された部分文字列を持つことはできません)。代わりに、デフォルト(スペース)区切り文字を使用してください。
print $0, x
また、部分文字列を文字列($0 = $0 x
)として追加するのではなく、別々の区切りフィールドとして追加したいようです。
$ awk '$2=="H" {x = substr($3,1,4)} $2!="H" {print $0, x}' input
12305245D 2500 AB 5454 87870001A 0003
12305245D 2500 ABC 5454 87870002A 0003
12305245D 2500 ABCD 5454 87870003A 0003
簡略化されたバージョン:
$ awk '$2=="H" {x = substr($3,1,4); next} {print $0, x}' input
12305245D 2500 AB 5454 87870001A 0003
12305245D 2500 ABC 5454 87870002A 0003
12305245D 2500 ABCD 5454 87870003A 0003
ノートこの回答厳密に予約済み入力フィールドの位置:最後の列の可変間隔は、可変数の末尾のスペースの結果です。投稿した入力から。