James P.
James P.

Reputation: 605

How can I extract a substring from the results of a cut command in unix?

I have a file that is '|' delimited. One of the fields within the file is a time stamp. The field is in the following format: MM-dd-yyyy HH:mm:ss I'd like to be able to print to a file unique dates. I can use the cut command (cut -f1 -d'|' _file_name_ |sort|uniq) to extract unique dates. However, with the time portion of the field, I'm seeing hundreds of results. After I run the cut command, I'd like to take the substring of the first eleven characters to display unique dates. I tried using an awk command such as: awk ' { print substr($1,1-11) }' | cut -f1 -d'|' _file_name_ |sort|uniq > _output_file_

I'm having no luck. Am I going about this the wrong way? Is there a more simple way of extracting the data I need. Any help would be appreciated.

Upvotes: 3

Views: 26051

Answers (3)

glenn jackman
glenn jackman

Reputation: 246774

if the date is the first (space separated) field in the file, then the list of unique dates is just:

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

Update: in addition to @shellter's correct answer, I'll just present an alternative to demonstrate other awk facilities:

awk '{split($10, a); date[a[1]]++} END {for (d in date) print d}' filename

Upvotes: 4

shellter
shellter

Reputation: 37258

You're all most there. This is based on the idea that the date time stamp is in field 1.

Edit : changed field to 10, also used -u option to sort instead of sep process with uniq

You don't need the cut, awk will do that for you.

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

I hope this helps.

P.S. as you appear to be a new user, if you get an answer that helps you please remember to mark it as accepted, or give it a + (or -) as a useful answer

Upvotes: 3

FrankH.
FrankH.

Reputation: 18217

cut -c1-11 will display characters 1-11 of each input line.

Upvotes: 5

Related Questions