Я пытаюсь удалить первые два столбца (которые меня не интересуют) из файла журнала DbgView. Кажется, я не могу найти пример, который печатается от столбца 3 и далее до конца строки. Обратите внимание, что в каждой строке есть переменное количество столбцов.
linux
shell
unix
multiple-columns
Амит Джи
источник
источник
Ответы:
... или более простое решение:
cut -f 3- INPUTFILE
просто добавьте правильный разделитель (-d), и вы получите тот же эффект.источник
источник
awk '{for(i=3;i<=NF;++i)printf $i""FS ; print ""}'
(printf
не будет печатать символ новой строки, аprint ""
добавит новуюecho $(seq 1 10) | awk '{for (i=3; i<=NF; i++) printf $i FS}'
, что дает:3 4 5 6 7 8 9 10
.решение найдено здесь:
http://www.linuxquestions.org/questions/linux-newbie-8/awk-print-field-to-end-and-character-count-179078/
источник
В ответе Джонатана Файнберга каждое поле печатается в отдельной строке. Вы можете использовать
printf
для перестройки записи для вывода в той же строке, но вы также можете просто переместить поля прыжком влево.источник
NF
в POSIX запрещено.NF
возможности уменьшения.NB: этот метод оставит «пробелы» в полях 1,2,3, но это не проблема, если вы просто хотите посмотреть вывод.
источник
1
? по какому ключевому слову мне следует искатьawk
?{$1=$2=$3="";$0=$0;$1=$1}1
Если вы хотите напечатать столбцы после 3-го, например, в той же строке, вы можете использовать:
Например:
Он напечатает:
Как видим, расчетная ведомость даже с пробелом отображается в правильной строке.
источник
А как насчет следующей строки:
На основе предложения @ ghostdog74. Мой должен вести себя лучше, когда вы фильтруете строки, то есть:
источник
sed 's/\s\+//g'
в конец командыЭто обрезает то, что находится перед заданным номером поля, N, и печатает всю остальную часть строки, включая поле номер N и сохраняя исходный интервал (он не переформатируется). Не имеет значения, появляется ли строка поля также где-то еще в строке, что является проблемой с ответом daisaa.
Определите функцию:
И используйте это так:
Вывод поддерживает все, включая конечные пробелы
Хорошо работает для файлов, где '/ n' является разделителем записей, поэтому у вас нет символа новой строки внутри строк. Если вы хотите использовать его с другими разделителями записей, используйте:
например. Хорошо работает почти со всеми файлами, если в них не используется шестнадцатеричный номер символа. 1 внутри линий.
источник
Следующая команда awk печатает последние N полей каждой строки, а в конце строки печатает символ новой строки:
Найдите ниже пример, в котором перечисляется содержимое каталога / usr / bin, затем содержатся последние 3 строки, а затем печатаются последние 4 столбца каждой строки с помощью awk:
источник
Сначала вы находите положение начала третьего столбца. С помощью substr вы напечатаете всю строку ($ 0), начиная с позиции (в данном случае a) до конца строки.
источник
Что ж, вы можете легко добиться того же эффекта, используя регулярное выражение. Если предположить, что разделитель - это пробел, это будет выглядеть так:
источник
awk '{ sub(/([^ ]+ +){2}/, ""); print }'
при этом узор удаляется в два раза.источник
Решение Perl:
Используются следующие параметры командной строки:
-n
цикл вокруг каждой строки входного файла, не печатать автоматически каждую строку-l
удаляет символы новой строки перед обработкой и добавляет их после-a
режим autosplit - разбивать входные строки в массив @F. По умолчанию разделение на пробелы-e
выполнить код Perlsplice @F,0,2
чисто удаляет столбцы 0 и 1 из массива @Fjoin " ",@F
объединяет элементы массива @F, используя пробел между каждым элементомЕсли ваш входной файл разделен запятыми, а не пробелами, используйте
-F, -lane
Решение Python:
python -c "import sys;[sys.stdout.write(' '.join(line.split()[2:]) + '\n') for line in sys.stdin]" < file
источник
Здесь немного поздно, но ничего из вышеперечисленного, похоже, не сработало. Попробуйте это, используя printf, вставляя пробелы между ними. Я решил не использовать новую строку в конце.
источник
печатает записи, начиная с 4-го поля до последнего поля в том же порядке, в котором они были в исходном файле
источник
В Bash вы можете использовать следующий синтаксис с позиционными параметрами:
Подробнее: Обработка позиционных параметров на Bash Hackers Wiki
источник
Если речь идет только об игнорировании первых двух полей и если вам не нужен пробел при маскировке этих полей (как это делают некоторые из ответов выше):
источник
Первые два столбца очищаются,
sed
удаляются ведущие пробелы.источник
В AWK столбцы называются полями, поэтому NF - это ключ
все строки:
только первая строка:
источник