grep between 3rd and 4rth comma


Text files look like this :

689:2006/07/12 01:08:06,5,espresso,1492197335,star_schema_log,0.198698,0.394908,0.00448759090909091,88,1.46666666666667
689:2006/07/12 01:08:06,5,espresso,1492197336,star_schema_log,0.198698,0.394908,0.00448759090909091,88,1.46666666666667
689:2006/07/12 01:08:06,5,espresso,1492197337,star_schema_log,0.198698,0.394908,0.00448759090909091,88,1.46666666666667

I wanted to grep only word star_schema_log between 3rd and 4rth comma ..... how can i do this!

Who is Participating?
grsteedConnect With a Mentor Commented:
Not sure exactly what you're looking for. You say "I wanted to grep only word star_schema_log between 3rd and 4rth comma"  

The word "star_schema_log" shows up between the 4th and 5th comma.

If you want the value between the 3rd and 4th comma (4th field) , how about this,

cat file |cut -d "," -f  4

This will give you a list of the values in the 4th field. If you want to look for something specific, add "|grep whatever" to that command.


zephyr_hex (Megan)DeveloperCommented:
use grep to get the lines you need (if you need to select only certain lines from a file), and then use awk to parse the lines.
zephyr_hex (Megan)DeveloperCommented:
or, use can use "cut" along with grep... grep will select the lines you need and cut can parse the lines
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

amahajan1981Author Commented:
i dont want to select lines all lines have "," as delimeter...

i just wanted to get a word from 3rd and 4rth ","

I am a beginner in unix...just started to read abt awk and sed

rockiroadsConnect With a Mentor Commented:
You could try AWK

cat yourfile | awk -F','  '{print $4}'

I think its $4 to get between 3rd and 4th, if not, try $3 or $5

passing in -F is what delimiter to use, in this case its a comma

it then puts the values into argument variables
$1 refers to the value up to the 1st comma
$2 refers to the value between 1st and 2nd comma
and so on

tacticalvehicleConnect With a Mentor Commented:
as commented rockiroads,

AWK tool is best for you

awk -F,  ' { print $4 }' /pathto/file.log

# this is only for for better perfomance cat with PIPE isnt nescessary in this case becouse AWK is able read log file directly
# ( I also forgot this feature :)

if you want more fields...

awk -F,  ' { print $3"   "$4 }' /pathto/file.log  
# output is will be
#espresso   1492197335
#espresso   1492197336
#espresso   1492197337

also with AWK you cas count this fileds or sort or else
I hope now is for you clear

90% points this solution is for rockiroads ;)
just 90%? ha, only kidding tacticalvehicle. Im so just to piping output from cat, I forget u can do the way u did

thanks for the recommendation though, appreciated!
Print all lines where the 4th field matches a pattern:

awk -F"," '/ $4 == "star_schema_log" {print $0}' /pathto/file.log
The simplest solution is as someone above suggested: cut does it simply and correctly. You tell it that your delimiter is the comma, and that you want field number 5:
   cut -d, -f5 file.txt

In fact, cut is really clever, in that you can pick out only the fields you want, e.g. to grab fields 1, 5, 6 and 7, you can do:
   cut -d, -f1,5-7 file.txt
# quick&dirty
awk -F,  '{print $4}' /path/to/file.log|grep pattern

# the awk way
awk -F,  '/'pattern/'{print}' /path/to/file.log
amahajan1981Author Commented:
Thnks guys for ur help!!

All Courses

From novice to tech pro — start learning today.