2011-02-10 4 views

ответ

78

Вырезать может занять несколько диапазонов в -f:

Колонны до 4 и с 7 и далее:

разреза -f -4,7-

или для полей 1,2-5,6 и от 10 года:

разреза -f 1,2,5, 6,10-

и т.д.

+7

It wor ks намного лучше с разделителем ....... cut -d '' -f -2 <<< 'Это тест' – Yogamurthy

-1

вы можете использовать AWK, например, отрезать 1-й, 2-й и последние 3 колонки

awk '{for(i=3;i<=NF-3;i++} print $i}' file 

, если у вас есть язык программирования такой Руби (1.9+)

$ ruby -F"\t" -ane 'print $F[2..-3].join("\t")' file 
2

чтобы использовать AWK, чтобы отрезать первые и последние поля:

awk '{$1 = ""; $NF = ""; print}' inputfile 

К сожалению, оставляет разделители полей, так

aaa bbb ccc 

становится

[space]bbb[space] 

Чтобы сделать это, используя ответ Карого, который не оставит лишние пробела, но в некотором смысле это в соответствии с вашими требованиями:

awk '{delim = ""; for (i=2;i<=NF-1;i++) {printf delim "%s", $i; delim = OFS}; printf "\n"}' inputfile 

Это также устраняет пару проблем в этом ответе.

Обобщая, что:

awk -v skipstart=1 -v skipend=1 '{delim = ""; for (i=skipstart+1;i<=NF-skipend;i++) {printf delim "%s", $i; delim = OFS}; printf "\n"}' inputfile 

Затем вы можете изменить количество полей, чтобы пропустить в начале или в конце, изменив присвоения переменных в начале команды.

-1

Попробуйте следующее:

echo a#b#c | awk -F"#" '{$1 = ""; $NF = ""; print}' OFS="" 
0

Вы можете использовать Bash для этого:

while read -a cols; do echo ${cols[@]:0:1} ${cols[@]:1,-1}; done < file.txt 
0

Вы можете вырезать, используя следующие,
-d: разделителем, -f для полей
\ т используемых для полей с вкладками

cut -d$'\t' -f 1-3,7- 
Смежные вопросы