Ответ 1
Это команда cut
для:
cut -f1,2,30- inputfile
По умолчанию используется вкладка. Вы можете изменить это с помощью переключателя -d
.
Как удалить некоторые столбцы из файла полей, разделенных вкладками, с помощью awk
?
c1 c2 c3 ..... c60
Например, удалите столбцы между 3 и 29.
Это команда cut
для:
cut -f1,2,30- inputfile
По умолчанию используется вкладка. Вы можете изменить это с помощью переключателя -d
.
Вы можете перебрать все столбцы и отфильтровать те, которые вы не хотите:
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
это улучшено двумя способами:
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
Решение "сращивания" Perl, которое не добавляет начальное или конечное пробелы:
perl -lane 'splice @F,3,27; print join " ",@F' file
Производит вывод:
c1 c2 c30 c31