Удаление столбцов из файла с помощью awk или из командной строки в linux Как удалить некоторые столбцы из файла полей, разделенных вкладками, с помощью awk? c1 c2 c3 ..... c60 Например, удалите столбцы между 3 и 29. Ответ 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
Ответ 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