Как напечатать третий столбец до последнего столбца? - PullRequest
103 голосов
/ 21 октября 2009

Я пытаюсь удалить первые два столбца (которые меня не интересуют) из файла журнала DbgView. Я не могу найти пример, который печатает от столбца 3 и далее до конца строки. Обратите внимание, что каждая строка имеет переменное количество столбцов.

Ответы [ 18 ]

2 голосов
/ 10 ноября 2017
awk '{a=match($0, $3); print substr($0,a)}'

Сначала вы найдете позицию начала третьего столбца. С помощью substr вы напечатаете всю строку ($ 0), начиная с позиции (в данном случае a) до конца строки.

2 голосов
/ 16 сентября 2015

Perl решение:

perl -lane 'splice @F,0,2; print join " ",@F' file

Используются следующие параметры командной строки:

  • -n цикл вокруг каждой строки входного файла, не печатать автоматически каждую строку

  • -l удаляет символы новой строки перед обработкой и добавляет их потом

  • -a режим автоматического разделения - разбить входные строки на массив @F. По умолчанию расщепление по пробелам

  • -e выполнить код perl

splice @F,0,2 чисто удаляет столбцы 0 и 1 из массива @F

join " ",@F объединяет элементы массива @F, используя пробел между каждым элементом

Если ваш входной файл разделен запятыми, а не пробелами, используйте -F, -lane


Python-решение:

python -c "import sys;[sys.stdout.write(' '.join(line.split()[2:]) + '\n') for line in sys.stdin]" < file

1 голос
/ 14 ноября 2014
awk '{for (i=4; i<=NF; i++)printf("%c", $i); printf("\n");}'

печатает записи, начиная с 4-го поля до последнего поля в том же порядке, в котором они были в исходном файле

1 голос
/ 10 апреля 2016

В Bash вы можете использовать следующий синтаксис с позиционными параметрами:

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

Подробнее: Обработка позиционных параметров на Bash Hackers Wiki

1 голос
/ 25 января 2013

Здесь немного поздно, но ничего из вышеперечисленного не помогло. Попробуйте это, используя printf, вставляя пробелы между каждым. Я решил, что в конце не должно быть новой строки.

awk '{for(i=3;i<=NF;++i) printf("%s ",  $i) }'
0 голосов
/ 01 декабря 2017

В AWK столбцы называются полями, поэтому NF является ключом

все строки:

awk -F '<column separator>' '{print $(NF-2)}' <filename>

только первый ряд:

awk -F '<column separator>' 'NR<=1{print $(NF-2)}' <filename>
0 голосов
/ 23 ноября 2016
awk '{$1=$2=""}1' FILENAME | sed 's/\s\+//g'

Первые два столбца очищены, sed удаляет начальные пробелы.

0 голосов
/ 21 февраля 2016

Если речь идет только о игнорировании первых двух полей и если вам не нужен пробел при маскировании этих полей (как это делают некоторые из приведенных выше ответов):

awk '{gsub($1" "$2" ",""); print;}' file
...