了解AWK命令中使用的SUB
我需要了解此命令是如何工作的:了解AWK命令中使用的SUB,awk,substitution,Awk,Substitution,我需要了解此命令是如何工作的: awk 'BEGIN{while(a++<30)s=s " "};{sub(/^.{6}/,"&" s)};l' myfile awk'BEGIN{while(a++它与第6列无关,并且它不寻找文本{6} 大括号表示“前面的许多模式”(如果您使用--posix或--re interval调用GNU awk) 因此,这种模式: /^.{6}/ 相当于: /^....../ 它所做的是在前6个字符后添加字符串s,这6个字符可以是任何字符 以下awk
awk 'BEGIN{while(a++<30)s=s " "};{sub(/^.{6}/,"&" s)};l' myfile
awk'BEGIN{while(a++它与第6列无关,并且它不寻找文本{6}
大括号表示“前面的许多模式”(如果您使用--posix或--re interval调用GNU awk)
因此,这种模式:
/^.{6}/
相当于:
/^....../
它所做的是在前6个字符后添加字符串s
,这6个字符可以是任何字符
以下awk命令将执行类似的操作:
awk 'BEGIN{while(a++<30)s=s " "} {print substr($0, 1, 6) s substr($0, 7)}' myfile
awk'BEGIN{while(a++请参阅@BillKarwin的答案了解它在做什么,请参阅下面的第二个awk脚本了解更简洁的方法:
$ cat file
abcdefghi
$ awk 'BEGIN{while(a++<30)s=s " "} {sub(/^.{6}/,"&" s)} 1' file
abcdef ghi
$ awk '{printf "%-36s%s\n",substr($0,1,6),substr($0,7)}' file
abcdef ghi
$cat文件
abcdefghi
$awk'BEGIN{while(在最近的gawk发行版中默认启用了a++RE interval,因此如果您有较旧版本的gawk,则只需要--RE interval(并且应该避免--posix)。非常感谢您的全面回复!这真的很有帮助。@EdMorton感谢您的提示,我在CentoS 6.4上使用GNU awk 3.1.7,我不得不使用该标志。默认情况下启用它的最新gawk发行版算什么?它在gawk 4.0.0中默认启用,在此之前不确定。gawk现在升级到4.1.0版。@user2395215,OS X基于FreeBSD UNIX,我相信它使用了大多数工具的UNIX实现,而不是GNU工具。去掉空语句(伪分号),这应该是脚本末尾的第一个(1
),而不是字母el(l
)。