0

以下 awk 语句按预期工作。

awk '{print $1, $2, $3}' test.txt

但是我怎么说我需要第二列之后的所有列呢?

awk '{print $1, $2, $3 to $NF}' test.txt

我需要从第三列到该行末尾的所有列。可以有 2 到 10 列,所有列都被视为最后一列的一部分。

4

3 回答 3

1

如果你只想要$3-$NF字段,标准方法是循环(for/while

但根据您的要求,您可以:

awk '{$1=$2="";}sub("^ *","")'

例如:

kent$  seq -s' ' 10|awk '{$1=$2="";}sub("^ *","")' 
3 4 5 6 7 8 9 10

如果您想将 100 个字段“分组”为 3 个组:1,2、3-100:

awk '{x=$0;sub($1FS$2,"",x);gsub(FS,"",x);print $1,$2,x}'   

同样的例子:

kent$  seq -s' ' 10|awk '{x=$0;sub($1FS$2,"",x);gsub(FS,"",x);print $1,$2,x}'    
1 2 345678910

希望这是你想要的。

于 2013-02-22T12:09:44.400 回答
1

直观的方式。

awk 'BEGIN{ORS=""} {for(i=3; i<=NF; i++) if(i != NF){print $i " "} else {print $i "\n"}}' test.txt

于 2013-02-22T12:27:39.620 回答
0

多一点:

awk '{$1=$2=x; $0=$0; $1=$1}1' file

awk '{$1=$1; sub($1 FS $2 FS,x)}1' file

为了保持间距完整:

awk 'sub($1 "[ \t]*" $2 "[ \t]*",x)' file
于 2013-02-22T21:18:03.740 回答