在这个简单的情况下,你所需要的只有:
$ awk '{t=$3; $3=$2; $2=$1; $1=t}1' file
CCCC AAAA BBBB DDDD
在GNU awk中,通常使用gensub()
函数来处理\s
和\S
:
$ awk '{print $3, $1, $2, gensub(/^\s*(\S+\s+){3}/,"","")}' file
CCCC AAAA BBBB DDDD
gensub()
函数只会跳过前三个字段,而从那一点开始保留所有字段及其间的空格。
$ cat file
AAAA BBBB CCCC DDDD EEEE FFFF GGGG
$ awk '{print $3, $1, $2, gensub(/^\s*(\S+\s+){3}/,"","")}' file
CCCC AAAA BBBB DDDD EEEE FFFF GGGG
你可以使用 match()+substr()
与其他 awk 命令实现相同的功能:
$ awk '{match($0,/^[[:space:]]*([^[:space:]]+[[:space:]]+){3}/); print $3, $1, $2, substr($0,RLENGTH+1)}' file
CCCC AAAA BBBB DDDD EEEE FFFF GGGG
您可以使用sub()
函数和一个变量:
$ awk '{x=$0; sub(/^[[:space:]]*([^[:space:]]+[[:space:]]+){3}/,"",x); print $3, $1, $2, x}' file
CCCC AAAA BBBB DDDD EEEE FFFF GGGG