Подтвердить что ты не робот

Удаление столбцов из файла с помощью awk или из командной строки в linux

Как удалить некоторые столбцы из файла полей, разделенных вкладками, с помощью awk?

c1 c2 c3 ..... c60

Например, удалите столбцы между 3 и 29.

4b9b3361

Ответ 1

Это команда cut для:

cut -f1,2,30- inputfile

По умолчанию используется вкладка. Вы можете изменить это с помощью переключателя -d.

Ответ 2

Вы можете перебрать все столбцы и отфильтровать те, которые вы не хотите:

awk '{for (i=1; i<=NF; i++) if (i<3 || i>29) printf $i " "; print""}' input.txt

где NF дает вам общее количество полей в записи.
Для каждого столбца, который соответствует условию, мы печатаем столбец, за которым следует пробел " ".


EDIT: обновлено после замечания от johnny:

awk -F 'FS' 'BEGIN{FS="\t"}{for (i=1; i<=NF-1; i++) if(i<3 || i>5) {printf $i FS};{print $NF}}' input.txt

это улучшено двумя способами:

  • сохраняет исходные разделители
  • не добавляет разделитель в конец

Ответ 3

awk '{for(z=3;z<=15;z++)$z="";$0=$0;$1=$1}1'

Ввод

c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21

Выход

c1 c2 c16 c17 c18 c19 c20 c21

Ответ 4

Решение "сращивания" Perl, которое не добавляет начальное или конечное пробелы:

perl -lane 'splice @F,3,27; print join " ",@F' file

Производит вывод:

c1 c2 c30 c31