String 带有printf的Awk语法-不需要格式

String 带有printf的Awk语法-不需要格式,string,awk,printf,String,Awk,Printf,我很难确定awk语句的语法哪里有错误。我的数据如下所示: AAAA777 AAADMD AAAEEE AAALAWN AAAMAN AAA7777 awk '{ printf "%-8.8s%2.2s%2s\n",$0,"ZC","#8" }' file.txt 我希望输出是左对齐,填充到8个字符总数,加上一对夫妇的附加组件在最后。所需的输出如下所示: AAAA777 ZC#8 AAADMD ZC#8 相反,我得到的是: ZC#8777 ZC#8D ZC#8E ZC#8AWN

我很难确定awk语句的语法哪里有错误。我的数据如下所示:

AAAA777
AAADMD
AAAEEE
AAALAWN
AAAMAN
AAA7777
awk '{ printf "%-8.8s%2.2s%2s\n",$0,"ZC","#8" }' file.txt

我希望输出是左对齐,填充到8个字符总数,加上一对夫妇的附加组件在最后。所需的输出如下所示:

AAAA777 ZC#8
AAADMD  ZC#8

相反,我得到的是:

ZC#8777
 ZC#8D
 ZC#8E
ZC#8AWN
 ZC#8N
ZC#8777

我的awk声明如下所示:

AAAA777
AAADMD
AAAEEE
AAALAWN
AAAMAN
AAA7777
awk '{ printf "%-8.8s%2.2s%2s\n",$0,"ZC","#8" }' file.txt

它看起来很落后,而且不是期望的字符数。我做错了什么?

问题似乎是您的文件有DOS/Windows行结尾。我在没有它们的情况下创建了file.txt,效果很好:

$ awk '{ printf "%-8.8s%2.2s%2s\n",$0,"ZC","#8" }' file.txt
AAAA777 ZC#8
AAADMD  ZC#8
AAAEEE  ZC#8
AAALAWN ZC#8
AAAMAN  ZC#8
AAA7777 ZC#8
但是,如果我将行尾转换为DOS,则会得到您看到的输出:

$ unix2dos <file.txt >file.dos
$ awk '{ printf "%-8.8s%2.2s%2s\n",$0,"ZC","#8" }' file.dos
ZC#8777
 ZC#8D
 ZC#8E
ZC#8AWN
 ZC#8N
ZC#8777
太棒了,就是这样。很好用!