Bash 从第n个字段开始打印的较短awk
要打印从N开始的字段,请假定N=5Bash 从第n个字段开始打印的较短awk,bash,awk,Bash,Awk,要打印从N开始的字段,请假定N=5 awk '{for(i=5;i<=NF;i++){if(i<NF){printf "%s%s",$i,OFS}else{print $i}}}' # This is a bit lengthy! awk'{for(i=5;i使用默认字段分隔符和GNU awk(版本4+),这稍微短一些: gawk '{ sub(/^\s*(\S+\s+){4}/, "") }1' file 这将从行首删除4个字段,包括任何前导空格。对于非常简单的应用程序,cu
awk '{for(i=5;i<=NF;i++){if(i<NF){printf "%s%s",$i,OFS}else{print $i}}}'
# This is a bit lengthy!
awk'{for(i=5;i使用默认字段分隔符和GNU awk(版本4+),这稍微短一些:
gawk '{ sub(/^\s*(\S+\s+){4}/, "") }1' file
这将从行首删除4个字段,包括任何前导空格。对于非常简单的应用程序,cut
可能更适合:
$ echo "1 2 3 4 5 6 7 8" | cut -d' ' -f5-
5 6 7 8
我不认为没有。你可以使用稍微短一点的while循环,但它只能在一行上工作。另外,我认为你之前的问题很好,因为例子很短,也很相关。它不应该是I为什么不awk-vn=5'{for(i=n;i@DavidC.Rankin谢谢。稍微短一点。需要gawk 4.0+。请重新检查问题,OP只想在awk
@Inian中找到解决方案,这可能是事实,但从OP的上下文来看,似乎是用大锤敲开螺母。这可能对他们有帮助,也可能没有帮助,但这并不能阻止这是一个合理的解决方案(毕竟,其中一项要求是“更短”)。