复制标题记录并将其粘贴到详细信息中

复制标题记录并将其粘贴到详细信息中

在末尾添加计数后,观察到字符串数据类型的位置发生了变化。

       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

笔记这些答案严格保留输入字段的位置:最后一列的可变间距是尾随空格数量可变的结果在您发布的输入中

相关内容