Как извлечь подстроку из результатов команды вырезки в unix? - PullRequest
2 голосов
/ 28 марта 2011

У меня есть файл '|' разграничены. Одним из полей в файле является отметка времени. Поле имеет следующий формат: MM-dd-yyyy HH:mm:ss Я бы хотел иметь возможность печатать в файл уникальные даты. Я могу использовать команду вырезать (cut -f1 -d'|' _file_name_ |sort|uniq), чтобы извлечь уникальные даты. Тем не менее, со временем часть поля, я вижу сотни результатов. После того, как я выполню команду вырезать, я бы хотел взять подстроку из первых одиннадцати символов для отображения уникальных дат. Я попытался использовать команду awk, такую ​​как: awk ' { print substr($1,1-11) }' | cut -f1 -d'|' _file_name_ |sort|uniq > _output_file_

Мне не повезло. Я поступаю об этом неправильно? Есть ли более простой способ извлечения нужных мне данных. Любая помощь будет оценена.

Ответы [ 3 ]

4 голосов
/ 28 марта 2011

если дата является первым (разделенным пробелами) полем в файле, то список уникальных дат просто:

cut -f1 -d' ' filename | sort -u

Обновление: в дополнение к правильному ответу @ shellter, я простопредставить альтернативу для демонстрации других объектов awk:

awk '{split($10, a); date[a[1]]++} END {for (d in date) print d}' filename
3 голосов
/ 28 марта 2011

Вы все там.Это основано на идее, что отметка даты и времени находится в поле 1.

Редактировать: изменилось поле на 10, также использовалась опция -u для сортировки вместо процесса sep с uniq

Вы делаетеМне не нужен рубчик, awk сделает это за вас.

awk -F"|" ' { print substr($10,1,11) }'  _file_name_ |sort -u > _output_file_

Надеюсь, это поможет.

PS, поскольку вы выглядите новым пользователем, если получите ответ, который помогаетпожалуйста, помните, чтобы пометить его как принятый, или дать + (или -) в качестве полезного ответа

3 голосов
/ 28 марта 2011

cut -c1-11 будет отображать символы 1-11 каждой строки ввода.

...