Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/installation/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解AWK命令中使用的SUB_Awk_Substitution - Fatal编程技术网

了解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
)。