We help IT Professionals succeed at work.

grep and write to file from Shell script

dhuma
dhuma asked
on
950 Views
Last Modified: 2008-01-09
OS: Linux
Type: Shell Script

I have a CSV file in the following format.
'112'|1|'1480196'|15||'A'
'112'|1|'1481645'|15||'A'
'145'|1|'1492362'|15||'A'
'145'|1|'15103891'|15||'A'
'157'|1|'1536122'|15||'A'
'157'|1|'1537942'|15||'A'
'168'|1|'1587454'|15||'A'
'168'|1|'1596169'|15||'A'

From the above file, I would like to grep the rows with first column '145' and write them to a different file, can someone give me a script to do that.
Comment
Watch Question

Top Expert 2007

Commented:
Can be don in one command:

grep "^'145'" yourfile.csv >newfile.csv

Author

Commented:
Thanks for quick response, is it possible to also print the count of records in the new file.

example: I want to print the number of rows copied to new file as a header record
therefore, the new file will look like this

Header 2 rows
'145'|1|'1492362'|15||'A'
'145'|1|'15103891'|15||'A'

Top Expert 2007

Commented:
This will require a script ;-) like this:

#!/bin/bash
grep "^'145'" $1 >$2.$$
echo Header $( wc -l $2.$$ ) rows > $2
cat $2.$$ >> $2
rm $2.$$

call the script like
filterscript.sh source.csv destination.txt

Author

Commented:
thanks, its working however it is printing the header like this

if there are 1349 row, then I am seeing this in the header

1349 camd.csv.4912 rows.

Looks like the wc -l command is also printing the file name in addition to the word count. can you trim that and I will accept the solution.

thanks
Top Expert 2007
Commented:
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION
CERTIFIED EXPERT
Top Expert 2007

Commented:
hernst42.

No need for the UUOC ;-)

wc -l <$2.$$
CERTIFIED EXPERT
Top Expert 2007

Commented:
An alternate script is:

#!/bin/bash
(echo Header $(grep -c "^145" $1) rows; grep "^145" $1 ) >$2
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.