我有一个具有图 1 中结构的输入文件。该文件混合了描述字符。
到目前为止,我有以下代码,在第 2 行执行以下操作。
使所有描绘字符相同
批号大写为2569TESTLOT
用空格替换第一次出现的下划线。
用下划线替换第二次出现的空格。
awk -F "\t" '
{ sub(/\015/,"",$NF) } # remove CRs
NR == 1 { next }
NR == 2 { OFS = "\t"; # needed to replace spaces
$4 = toupper($4); # conv lot no. to uppercase
gsub(/ /,"_",$0);
sub(/_/," ",$1);
OFS = " "; print }
NR == 3 { next }
NR > 3 { print }
' $inpfile >| $tmpfile
我正在寻找的所需输出具有以下格式。
FP5A FP202 LD_BENCH LIFT 2569TESTLOT.....
但是,上面代码的结果是
FP5A FP202_LD 台式举升机 2569 测试台.....
我的问题是双重的。
如何使用 awk 结构中的 sub 命令替换特定位置的字符?
为什么 toupper 命令不将批号大写?
我正在使用 Cygwin 运行此 ksh 代码。我已经尝试过阅读 ksh 脚本指南,但仍然不知所措。
为什么 toupper 命令不将批号大写?
根据图1第4个字段持有
LOT
,而2569testlot
位于第5个字段,所以如果你愿意,你应该瞄准后者2569TESTLOT
如何使用 sub 替换特定位置的字符 awk 结构中的命令?
根据 GNU Awk 用户指南
sub(regexp, replacement [, target])
搜索目标,被视为字符串,查找与正则表达式 regexp(...) 匹配的最左边、最长的子字符串
因此,在使用
sub
时,除了第一次出现之外,您无法选择任何其他内容