Intereting Posts
Наутилус откроется на переднем плане Нет интернета на wlan, тогда eth0 устанавливается на статический Настройки формата диска для Linux-загрузочного 3G-модем для Linux, поддерживающий USB 3.0 Выписывать, не покидая Vim? Ошибка корневого монтирования pfsense после клонирования диска Сценарий Bash с кавычками и пробелами Почему некоторые опции недоступны Как проверить мою учетную запись на встроенном Linux без «/ etc / passwd»? Как обеспечить интерфейс GUI для всех пользователей Ubuntu? Как отправить последовательную команду через Экран через командную строку Странное сообщение об ошибке при установке CentOS 6.5 относительно диска, содержащего метаданные BIOS RAID? Изменение интервала регистрации в интервале от 10 минут до 1 минуты Pulseaudio с внешним звуковым адаптером: работайте со сломанным звуком Использование назначений makefile из сценария оболочки

Сценарий оболочки для фильтрации даты отдельно от конкретного столбца файла .csv и сохранения вывода в другом файле csv

Рассмотрим файл .csv, который имеет даты, указанные в шестом столбце в формате 7/20/2017 17:00 например.

Если я даю ввод как 7/11/2017 тогда он должен отфильтровать столбец с соответствующей датой ввода, и вывод должен быть сохранен в другом CSV-файле

Мне нужна команда для фильтрации 6-го столбца на основе введенного ввода.

file.csv имеет следующие записи:

 23,54,one,tree,56,7/20/2017 17:00,23,iii,89 23,54,one,tree,56,7/20/2017 17:00,23,iii,89 23,54,one,tree,56,7/21/2017 17:00,23,iii,89 23,54,one,tree,56,7/30/2017 17:00,23,iii,89 

аналогично несколько записей, которые соответствуют формату даты и времени в 6-й колонке. Вход, указанный во время выполнения, как прочитанный 7/20/2017 , затем должен отфильтровать дату с 6-го столбца и сохранить выходные данные в другом CSV-файле.

Просто с awk :

 awk -F, -vd="7/20/2017" '$6~d' input.csv > dates.csv 

Содержание dates.csv :

 23,54,one,tree,56,7/20/2017 17:00,23,iii,89 23,54,one,tree,56,7/20/2017 17:00,23,iii,89 

Если значение даты происходит из переменной оболочки:

 d="7/20/2017" awk -F, -vd="$d" '$6~d' input.csv > dates.csv 

Предполагая, что в этом формате есть только один столбец с датой:

 $ grep -F '7/20/2017' file.csv 23,54,one,tree,56,7/20/2017 17:00,23,iii,89 23,54,one,tree,56,7/20/2017 17:00,23,iii,89 

Вы можете перенаправить это в новый файл:

 $ grep -F '7/20/2017' file.csv >new.csv 

Чтобы правильно разобрать CSV-файл, используйте парсер CSV, например, встроенный в инструменты CSVkit :

 $ csvgrep -c 6 -m '7/20/2017' file.csv 23,54,one,tree,56,7/20/2017 17:00,23,iii,89 23,54,one,tree,56,7/20/2017 17:00,23,iii,89