Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to show certain column of a record using sed

Tags:

linux

sed

I have a list like this:

5678:robert dylan   :d.g.m. :marketing  :04/19/43 85000

I want to show only the name and designation of the person. I want to use sed for that. How should I do that?

like image 876
Sara Avatar asked Dec 02 '22 22:12

Sara


2 Answers

Update:

echo "5678:robert dylan :d.g.m. :marketing :04/19/43 85000" | 
sed 's/:/\n/g' | sed '1d;3d;$d'| sed 'N;s/\n/ - /'

yields

robert dylan - marketing

Explanation:

Works by splitting the line into several lines based on :, deleting the first, third and last lines, and then joining them up again.

NOTE: In the last expression, you can specify what separates the name from the designation by putting something else between the final set of / / in 'N;s/\n/ /'


Previous AWK solution:

Not sed, but awk is quite a natural tool for this if it is acceptable:

$ echo "5678:robert dylan :d.g.m. :marketing :04/19/43 85000" | awk -F":" '{print $2, $4}'

yields

robert dylan  marketing

Alternatively, if your data was stored in a file named data.txt:

awk -F":" '{print $2, $4}' data.txt

would produce the same output.

awk is really well suited for these sort of tasks.

Explanation:

awk -F":" '{print $2, $4}'

-F sets the field separator to :, print $2, $4 print resulting fields 2 and 4 respectively. You can use printf to format the output as specific as you need.

like image 86
Levon Avatar answered Dec 15 '22 13:12

Levon


Just thought I'd drop in the solution using cut

 cut -d ":" -f 2,4

produces:

 robert dylan :marketing
like image 29
Mike Redrobe Avatar answered Dec 15 '22 15:12

Mike Redrobe