How To Count Fields For Cut?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How To Count Fields For Cut?
# 1  
Old 06-08-2015
How To Count Fields For Cut?

I am new to cut and I want to use the field option with a space delimiter on an Apache log file.

For example, if I wanted to find the 200 HTTP code using cut in this manner on the file below

Code:
 cat access_abc.log | cut -d' ' -f7 | grep "200"

Code:
157.55.39.183 - - [08/Jun/2015:20:48:02 -0400] "GET /content/696-news041305 HTTP/1.1" 200 14574 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"

As I look at the file and count the spaces since that is the delimiter I am using I don't get it being f7. I get f8. I'll use the smileys to signify a space.

157.55.39.183 Smilie-Smilie -Smilie [08/Jun/2015:20:48:02Smilie -0400] Smilie"GETSmilie /content/696-news041305 SmilieHTTP/1.1" Smilie200 14574 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"

There may be an easier way or better way to do this but what I am wanting to know is how to count the fields. As it is now, I can do trial and error and find the field but I want to know the correct way to count them because above it shows 8 spaces and that seems to me to be f8 but the command is f7 that works.

Thanks,
Moderator's Comments:
Mod Comment Do NOT use smileys mixed with spaces to show spaces; it confuses everyone trying to figure out what your input looks like. Just use CODE tags. And, use CODE tags for ALL sample input, sample output, and code segments.

Last edited by Don Cragun; 06-08-2015 at 11:31 PM.. Reason: Add ICODE and CODE tags; add note.
# 2  
Old 06-08-2015
One of the better tools to use in this instance would be awk. The below example does not need grep or cat (cat is very rarely used at all in most situations), it will print field 7 and the number of fields:

Code:
awk '$9~/200/{print $7"\n"NF}' access_abc.log


Last edited by pilnet101; 06-09-2015 at 03:50 PM..
# 3  
Old 06-09-2015
You can't look for 200 using grep after you throw away that text.

With your sample input:
Code:
157.55.39.183 - - [08/Jun/2015:20:48:02 -0400] "GET /content/696-news041305 HTTP/1.1" 200 14574 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"

the fields recognized by cut with the field delimiter set to the <space> character are:
  1. 157.55.39.183
  2. -
  3. -
  4. [08/Jun/2015:20:48:02
  5. -0400]
  6. "GET
  7. /content/696-news041305
  8. HTTP/1.1"
  9. 200
  10. 14574
  11. "-"
  12. "Mozilla/5.0
  13. (compatible;
  14. bingbot/2.0;
  15. +http://www.bing.com/bingbot.htm)"
So, the command:
Code:
 cat access_abc.log | cut -d' ' -f7

and, the much more efficient, equivalent command:
Code:
cut -d' ' -f7 access_abc.log

will print:
Code:
/content/696-news041305

and, since that does not contain the string 200, there will be no output from the command:
Code:
cut -d' ' -f7 access_abc.log | grep "200"

I have no idea what you mean by the 200 HTTP code and you didn't give us the output you're trying to get. If you would give us sample log file lines matching the criteria you're trying to meet and lines that do not match your criteria (in CODE tags), show us the output you're trying to get from that input (in CODE tags), and clearly explain in English which input lines are to be selected and what output is to be produced from the selected lines, we can probably help you find an easy solution to your problem.
# 4  
Old 06-09-2015
If you use a space as a field separator with cut, and there are n spaces then there are n+1 fields, the first one being the one before the first space. If the required field is after 8 spaces, then that is field nr. 9 . So to get the value 200, you would need to use
Code:
cut -d ' ' -f9

Note that cut does not squeeze multiple occurrences of the characters, so every space, means a new space..
# 5  
Old 06-10-2015
Thanks to all of you for getting me straight on cut and showing me what I was doing wrong.

I have been wanting to learn awk. If you know if a good tutorial please shoot me a link.

I'll avoid the smiley use for spaces in the future. I like the way you did it so I will use that form if needed next time.

Randal
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Cut command: can't make it cut fields

I'm a complete beginner in UNIX (and not a computer science student either), just undergoing a tutoring course. Trying to replicate the instructions on my own I directed output of the ls listing command (lists all files of my home directory ) to My_dir.tsv file (see the screenshot) to make use of... (9 Replies)
Discussion started by: scrutinizerix
9 Replies

2. UNIX for Dummies Questions & Answers

Cut fields between delimiters

I'm having bother getting both lines contained in a file to output as the same value. A simple example: john:123456:123:456:doe john:123456:123:doe cut -d: -f1,4 input file john:456 john:doe ^ first line should be same as second. trick one for me, i know why it's because of the... (4 Replies)
Discussion started by: landofus
4 Replies

3. Shell Programming and Scripting

awk - count character count of fields

Hello All, I got a requirement when I was working with a file. Say the file has unloads of data from a table in the form 1|121|asda|434|thesi|2012|05|24| 1|343|unit|09|best|2012|11|5| I was put into a scenario where I need the field count in all the lines in that file. It was simply... (6 Replies)
Discussion started by: PikK45
6 Replies

4. Shell Programming and Scripting

how to cut fields in file

Hi, I have data in following format. 10001, John, Daves, Architecture, -2219 10002, Jim, Cirners, Businessman, -2219 1003, Tom, Katch, Engineer, -14003 I want to select the last column of the above given file and paste it on a different file in the following manner. File TEST column... (11 Replies)
Discussion started by: kam786sim
11 Replies

5. Shell Programming and Scripting

awk sed cut? to rearrange random number of fields into 3 fields

I'm working on formatting some attendance data to meet a vendors requirements to upload to their system. With some help on the forums here, I have the data close. But they've since changed what they want. The vendor wants me to submit three fields to them. Field 1 is the studentid field,... (4 Replies)
Discussion started by: axo959
4 Replies

6. Shell Programming and Scripting

cut: get either one or two fields

Hello, I would like to extract one or two fields of a line. At the moment, I am extracting the first field of a line: command | cut -f 1 -d '.' > file The line can have two or three fields delimited with a dot. if three fields, I want to be able to get the first two ie if line =... (3 Replies)
Discussion started by: maxvirrozeito
3 Replies

7. Shell Programming and Scripting

Cut Last 3 Fields

I have a text: dsj khfksjdh <time> EST 2006 ab cgnr jkkjt <time> EST 2006 gfhdgjghg <time> EST 2006 fkdjh kjhsekjrh kdjhfkh jhdfkhfdkjh kjdf <time> EST 2006 In the above file i need to extract time from every line... which is always the third from the last... Pls help! Cheers, Bouren (4 Replies)
Discussion started by: bourne
4 Replies

8. Shell Programming and Scripting

Fast way to cut fields

I have a tab delimited file which has 90 fields and 15 million rows approximately... I need to cut the first 78 fields only and I am using the cut -f1-78 <filename> <outputfile> It is taking a lot of time... Is there a faster way of doing this? Can we use NAWK to gain better... (0 Replies)
Discussion started by: madhunk
0 Replies

9. Shell Programming and Scripting

how to cut fields

I want to cut two coloums simulatiously and paste in some other file for ex: cut d ' ' -f3 -f4 xxx | paste yyy - > zzz; from the above i want to cut two fileds 3 and 4 and paste as last coloums of single file (zzz). how to solve this regards rajan (1 Reply)
Discussion started by: rajan_ka1
1 Replies

10. UNIX for Dummies Questions & Answers

count fields

Is there a way to count the no. of fields (columns) in a file? Actually I need to cut some fields starting from the middle to the end. How can I specify to cut till last field? thanks in advance :) (4 Replies)
Discussion started by: sskb
4 Replies
Login or Register to Ask a Question