Ответ 1
Ну, учитывая ваши данные, сокращение должно быть достаточным:
cut -d\ -f3- infile
У меня есть следующий файл, и мне нужно распечатать все, кроме $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
...
Ну, учитывая ваши данные, сокращение должно быть достаточным:
cut -d\ -f3- infile
$ 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
Хотя он добавляет дополнительное пространство в начале каждой строки по сравнению с ожидаемым результатом yael, здесь представлено более короткое и простое решение на основе awk, чем ранее предлагаемые:
awk '{$1=$2=""; print}'
или даже:
awk '{$1=$2=""}1'
Ответ danbens оставляет пробел в конце результирующей строки. поэтому правильный способ сделать это:
awk '{for (i=3; i<NF; i++) printf $i " "; print $NF}' filename
Если первые два слова не меняются, возможно, самое простое:
awk -F 'INFORMATION DATA ' '{print $2}' t
Здесь другое решение awk
, более гибкое, чем cut
, и короче, чем другие awk
. Предполагая, что ваши разделители являются одиночными пробелами (при необходимости измените регулярное выражение, если они не указаны):
awk --posix '{sub(/([^ ]* ){2}/, ""); print}'
Если 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
с запятой