2013-02-22 5 views
0

Следующая инструкция awk работает должным образом.группа столбцов в awk

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

Но как я могу сказать, что мне нужны все столбцы после второго столбца?

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

Мне нужны все столбцы из третьей колонки до конца этой строки. Может быть от 2 до 10 столбцов, и все они считаются частью последнего столбца.

ответ

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 

надеюсь, что это то, что вы хотите.

1

Интуитивно понятный способ.

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

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 
Смежные вопросы