|
Chopping off the last field of each line?
I'm working on the Web site for Creating Cool Web Sites and just realized that the little Unix trick I used while editing a file is actually a beautiful example of why so many people love Unix so much, so I thought I'd share it. The problem: a file where lines have 1-10 words + a last field value (in this case, a page number) that I don't want. The challenge is to figure out how to easily remove that last field, when there are a variable number of fields on the line.
How does this work? The rev command reverses each line of input, so that means that the first field of each now-reversed line is the field that we want to remove. That's easily done with cut with the -f2- flag (that means output field two through the end of the line). Then, finally, we re-reverse (that is, fix) each line and save the output in a new file.$ rev inputfile | cut -f2- | rev > outputfile Quickly and easily done.
Categorized:
Unix and Linux Help
(Article 3690,
Written by Dave Taylor)
Tagged: Previous: How do I tweak my PATH? Next: Another nice review of Wicked Cool Shell Scripts Subscribe!
well done Posted by: pedestrian at August 19, 2007 9:20 AMtry this awk '{$NF=""; print $0}' Cheers I prefer: awk '{NF--;print}' With NF="" you will have additional spaces at the end of each line. Posted by: porges at March 5, 2009 7:50 AMNice, this just solved a problem I've been working on. So thanks. I figured I'd try to make it work without the rev. Reversing the argument of the -f parameter should returned the same results. Posted by: Cannon at February 13, 2010 2:07 PMawk '{NF--;print}' Prints the whole name for me. What am I missing? awk '{NF="";print}' works, but I need to include the periods. Posted by: Rywin at March 25, 2010 9:22 AMI had to strip the last field from some 2Million line apache logs. First I tried the reverse-cut-reverse approach and that was likely to take 'forever'. I managed to do this with awk: cat filename |awk -F/ '{gsub($NF,"");print}' The gsub replaces the last field with a null string. My delimiter is / Nick Posted by: Nick at January 17, 2011 9:15 AMThanks Nick..
helped me too much.. was searching for this.. I am adding something else awk -F/ '{gsub($NF,"");sub(".$", "");print}' to cut the last part with delimiter as / input I have something to say, now that you mention it, but ...
I do have a comment, now that you mention it!
|
Recommended
Recent Entries
Search
I Need Help!
Apple iPad Help
Articles and Reviews Auctions and Online Shopping Blogs and RSS Feeds Building Web Site Traffic Business and Management CGI Scripts and Web Site Programming Computer and Internet Basics d) None of the Above Facebook Help Google Plus Help HTML and CSS Industry News and Trade Shows iPhone and Cell Phone Help iPod, Sony PSP and MP3 Player Help Mac OS X Help Pay Per Click (PPC) Advertising Search Engine Optimization (SEO) Shell Script Programming Tech Support Video Help The Writing Business Twitter, LinkedIn and Social Network Help Unix and Linux Help Video Game Tips and Help Windows PC Help WordPress Help |