在末尾添加计数后,观察到字符串数据类型的位置发生了变化。
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
笔记这些答案严格保留输入字段的位置:最后一列的可变间距是尾随空格数量可变的结果在您发布的输入中。