Intereting Posts
Лучше ли загружать Firefox с веб-сайта или использовать диспетчер пакетов? «Xmodmap -pke» показывает более 6 столбцов Как я могу использовать Awk для преобразования временной отметки unix для чтения человеком при создании файла журнала Tail-f? Помогите получить mtrack для работы в Macbook Pro Retina с Ubuntu 14.04 Какие альтернативные серверы поддерживают sudo и как они настроены? du и ls сообщают о неправильном размере каталога Почему не находит. -delete удалить текущий каталог? Зеркальное отображение одного приложения X при настройке с двумя мониторами с Openbox Запустить приложение, основанное на Ubuntu на CentOS «Безопасный режим» в Linux? Какой лучший дистрибутив для Toshiba Satellite L10-205 (старое оборудование) используется в основном для разработки? оценка арифметического расширения в bash Как использовать тайм-код при просмотре видео с YouTube с помощью livestreamer? неожиданное поведение bash после входа в консоль (openSUSE) Как отключить звуки событий в Plasma 5?

Возможно ли напечатать повторяющийся диапазон аргументов через cli из csv? (см. пример)

У меня есть сотни журналов, распространяющихся по нескольким тысячам виртуальных машин, и я пытаюсь создать несколько скриптов для быстрого сканирования журналов, и я выяснил большую часть презентации и хотел узнать, есть ли простой способ использовать что-то вроде awk, printf и т. д., которые я знаю, как использовать, но специально для печати повторяющегося диапазона значений из файлов журнала?

Пример:

awk -F, '{printf $(1..5)}' huge_log_file.csv column1 column2 column3 column4 column5 etc. 

Я знаю, как правильно прокручивать, форматировать, отделять и т. Д. Печатный вывод, но думал, что было бы неплохо, если бы я мог указать диапазон полей, которые я хотел бы распечатать.

Я уточню свой вопрос, если я выясню, как это сделать с предложенными аналогичными вопросами и / или самостоятельно.

Благодаря!

EDIT: я знаю, как печатать $ 1 $ 2 $ 3 вручную, но не включил его в свой пример

EDIT 2: Я также знаю, как подсчитывать количество полей с awk, используя NF для дальнейшего изменения диапазона, что является моей долгосрочной целью.

Диапазоны, начинающиеся с первого поля

Рассмотрим этот тестовый файл:

 $ cat input.csv a,b,c,d,e,f,g,h,i,j 

По крайней мере, с GNU awk мы можем напечатать первые пять (или других чисел) таких полей:

 $ awk -F, '{NF=5; print}' OFS=, input.csv a,b,c,d,e 

Для тех, кто ценит лаконичность по большей ясности, мы могли бы эквивалентно написать:

 $ awk -F, '{NF=5;} 1' OFS=, input.csv a,b,c,d,e 

Динамическое изменение размера

Чтобы оставить последние 2 поля, независимо от того, сколько полей предшествует этим двум:

 $ awk -F, '{NF-=2; print}' OFS=, input.csv a,b,c,d,e,f,g,h 

Другие диапазоны

Для печати запуска и остановки с произвольными полями необходим цикл:

 $ awk -v first=3 -v last=6 -F, '{for (i=first;i<=last;i++) printf "%s%s",$i,(i==last?ORS:OFS)}' OFS=, input.csv c,d,e,f 

Для печати из третьего поля и динамического оставления последних двух полей:

 $ awk -v first=3 -F, '{last=NF-2; for (i=first;i<=last;i++) printf "%s%s",$i,(i==last?ORS:OFS)}' OFS=, input.csv c,d,e,f,g,h 

Просто быстрый момент; awk намного более гибкий, но если все, что вам нужно, это определенный диапазон полей, используйте cut :

 cut -d, -f1-5 huge_log_file.csv 

Это намного проще, чем цикл awk если это все, что вам нужно.