awk + Необходимо напечатать все (все остальные поля), кроме $ 1 и $ 2 - PullRequest
11 голосов
/ 15 июня 2010

У меня есть следующий файл, и мне нужно распечатать все, кроме $1 и $2 awk

Файл:

INFORMATION DATA 12 33 55 33 66 43 
INFORMATION DATA 45 76 44 66 77 33 
INFORMATION DATA 77 83 56 77 88 22
...

желаемый вывод:

 12 33 55 33 66 43 
 45 76 44 66 77 33 
 77 83 56 77 88 22
...

Ответы [ 7 ]

18 голосов
/ 16 июня 2010

Ну, учитывая ваши данные, среза должно быть достаточно:

cut -d\  -f3- infile
11 голосов
/ 15 июня 2010
$ cat t
INFORMATION DATA 12 33 55 33 66 43
INFORMATION DATA 45 76 44 66 77 33
INFORMATION DATA 77 83 56 77 88 22

$ awk '{for (i = 3; i <= NF; i++) printf $i " "; print ""}' t 
12 33 55 33 66 43 
45 76 44 66 77 33 
77 83 56 77 88 22 
10 голосов
/ 20 апреля 2012

Хотя это добавляет дополнительный пробел в начале каждой строки по сравнению с ожидаемым выводом yael, вот более короткое и простое решение на основе awk, чем предложенные ранее:

awk '{$1=$2=""; print}'

или даже:

awk '{$1=$2=""}1'
3 голосов
/ 31 октября 2011

ответ danbens оставляет пробел в конце полученной строки.поэтому правильный способ сделать это будет:

awk '{for (i=3; i<NF; i++) printf $i " "; print $NF}' filename
2 голосов
/ 21 марта 2014

Если первые два слова не меняются, возможно, самая простая вещь будет:

awk -F 'INFORMATION DATA ' '{print $2}' t
0 голосов
/ 07 октября 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массив, используя пробел между каждым элементом

Изменение для входных файлов CSV:

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

При этом используется опция разделителя полей -F с запятой

0 голосов
/ 19 апреля 2012

Вот еще одно awk решение, более гибкое, чем cut, и короче, чем другие awk.Предполагая, что ваши разделители представляют собой один пробел (измените регулярное выражение, если это не так):

awk --posix '{sub(/([^ ]* ){2}/, ""); print}'
...