grep -v -f xxxxxxx


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting grep -v -f xxxxxxx
# 1  
Old 12-17-2001
Network grep -v -f xxxxxxx

I've got the code below. It does it's job but it's scrappy. Can someone explain why grep -v -f doesn't work against an empty file?

Basically I have a file of presumed good data - I want to remove any by comparing with a file I know are bad. When the bad file is empty - the output file is also empty. It's weird.

Works fine when the bad file has some data - so you'll see the cheap hack fix I've put in.


if [ -s tmp.merge.nos ]
then
join -t, -v 1 tmp.both tmp.req.merges | sed 's/=/,/' | grep -v -f tmp.merge.nos > $infile.ready
else
join -t, -v 1 tmp.both tmp.req.merges | sed 's/=/,/' > $infile.ready
fi

Maybe comm would be better - but I'd like to know why it doesn't work anyway (grep -v -f). CheersSmilie
# 2  
Old 12-18-2001
On my HP-UX, a single empty pattern file works OK with -v (returns all lines). But when I specify multiple pattern files, the first being empty, I get no data returned. An empty pattern file in any but the first position works fine:

grep -v -f pat1 -f patempty -f pat2 mydata

will return all lines except those represented in pat1 and pat2. So even though my unix handles this better than yours, it still fails when the first of multiple pattern files is empty. Don't know what the deal is with that.

Maybe yours will work with a non-empty first pattern file, which contains one weird pattern that would never occur in your data:

| grep -v -f patdummy -f tmp.merge.nos

Yea, it's still a workaround, but if it works for you, at least it would get rid of your if-else.
Jimbo
# 3  
Old 12-18-2001
Thanks Jimbo....

Good idea - but I'm in an environment where a dummy file like that would live a very short and painful life before it was taken to the vet and deleted.... I'd rather stick with the if-then - which although not beautiful code is at least effective.

Still would like to know any explanations for the behaviour....
# 4  
Old 12-18-2001
Some more system info - before someone wisely points out that I haven't provided any...

Sun0S 5.6

My grep for this script is

$ which grep
/usr/xpg4/bin/grep

Smilie
# 5  
Old 12-18-2001
Quote:
Originally posted by peter.herlihy

Good idea - but I'm in an environment where a dummy file like that would live a very short and painful life before it was taken to the vet and deleted....
How about...
Code:
echo supercalifragilisticexpialidocious > /tmp/patdummy
...| grep -v -f /tmp/patdummy -f tmp.merge.nos 
rm /tmp/patdummy

Quote:
Originally posted by peter.herlihy

Still would like to know any explanations for the behaviour....
You are sorta doing this...
grep -v "" < inputfile

And the null string is matching everything.
# 6  
Old 12-18-2001
Yeah - that works..... the only thing is that's also a workaround - and I already have one that works - which is probably less of a workaround.

I'm not adverse to using if-else, after all it's valid code and there for a good reason.... and I would think that the if-else I have is more 'pure' code than creation/deletion of a dummy file.

So I'm not all that worried about the if-else - happy to leave it there as it's no more inefficient than other methods you guys have come up with....really just curious about the empty file thing.

I played with that grep -v "" < file and got the same behaviour you suggested....do you know why null string is considered a match to everything else?
# 7  
Old 12-18-2001
Quote:
Originally posted by peter.herlihy
do you know why null string is considered a match to everything else?
Every string can be considered to have a null string in it. Think about how you would write grep. Unless you put in special code for a null string, it's gotta work this way. And who wants to slow down a program in ensure that something goofy like 'grep -v "" ' works.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Inconsistent `ps -eaf -o args | grep -i sfs_pcard_load_file.ksh | grep -v grep | wc -l`

i have this line of code that looks for the same file if it is currently running and returns the count. `ps -eaf -o args | grep -i sfs_pcard_load_file.ksh | grep -v grep | wc -l` basically it is assigned to a variable ISRUNNING=`ps -eaf -o args | grep -i sfs_pcard_load_file.ksh |... (6 Replies)
Discussion started by: wtolentino
6 Replies

2. UNIX for Dummies Questions & Answers

Piping grep into awk, read the next line using grep

Hi, I have a number of files containing the information below. """"" Fundallinfo 6.3950 14.9715 14.0482 """"" I would like to grep for Fundallinfo and use it to read the next line? I ideally would like to read the three numbers that follow in the next line and... (2 Replies)
Discussion started by: Paul Moghadam
2 Replies

3. UNIX for Dummies Questions & Answers

Bash - CLI - grep - Passing result to grep through pipe

Hello. I want to get all modules which are loaded and which name are exactly 2 characters long and not more than 2 characters and begin with "nv" lsmod | (e)grep '^nv???????????? I want to get all modules which are loaded and which name begin with "nv" and are 2 to 7 characters long ... (1 Reply)
Discussion started by: jcdole
1 Replies

4. Shell Programming and Scripting

AWK/GREP: grep only lines starting with integer

I have an input file 12.4 1.72849432773174e+01 -7.74784188610632e+01 12.5 9.59432114416327e-01 -7.87018212757537e+01 15.6 5.20139995965960e-01 -5.61612429666624e+01 29.3 3.76696387248366e+00 -7.42896194101892e+01 32.1 1.86899877018077e+01 -7.56508762501408e+01 35 6.98857157014640e+00... (2 Replies)
Discussion started by: chrisjorg
2 Replies

5. UNIX for Dummies Questions & Answers

Advanced grep'in... grep for data next to static element.

I have a directory I need to grep which consists of numbered sub directories. The sub directory names change daily. A file resides in this main directory that shows which sub directories are FULL backups or INCREMENTAL backups. My goal is to grep the directory for the word "full" and then... (2 Replies)
Discussion started by: SysAdm2
2 Replies

6. AIX

"fuser -c -k /XXX/XXXXXXX" Fails and stuck on AIX 6100-05-01-1016

Hi I was wondering if anybody has come across in a failure of fuser command. We have a backup script that is: fuser -c -k /XXX/XXXXXXX sync;sync umount /XXX/XXXXXXX/ backup -0 -f /dev/rmt0.1 -u /dev/XXXXXXXlv mount /XXX/XXXXXXX/ sync;sync The script is called from crontab via an... (2 Replies)
Discussion started by: ggovotsis
2 Replies

7. Shell Programming and Scripting

grep for certain files using a file as input to grep and then move

Hi All, I need to grep few files which has words like the below in the file name , which i want to put it in a file and and grep for the files which contain these names and move it to a new directory , full file name -C20091210.1000-20091210.1100_SMGBSC3:1000... (2 Replies)
Discussion started by: anita07
2 Replies

8. UNIX for Dummies Questions & Answers

| help | unix | grep (GNU grep) 2.5.1 | advanced regex syntax

Hello, I'm working on unix with grep (GNU grep) 2.5.1. I'm going through some of the newer regex syntax using Regular Expression Reference - Advanced Syntax a guide. ls -aLl /bin | grep "\(x\)" Which works, just highlights 'x' where ever, when ever. I'm trying to to get (?:) to work but... (4 Replies)
Discussion started by: MykC
4 Replies

9. UNIX for Dummies Questions & Answers

| help | unix | grep - Can I use grep to return a string with exactly n matches?

Hello, I looking to use grep to return a string with exactly n matches. I'm building off this: ls -aLl /bin | grep '^.\{9\}x' | tr -s ' ' -rwxr-xr-x 1 root root 632816 Nov 25 2008 vi -rwxr-xr-x 1 root root 632816 Nov 25 2008 view -rwxr-xr-x 1 root root 16008 May 25 2008... (7 Replies)
Discussion started by: MykC
7 Replies

10. Shell Programming and Scripting

MEM=`ps v $PPID| grep -i db2 | grep -v grep| awk '{ if ( $7 ~ " " ) { print 0 } else

Hi Guys, I need to set the value of $7 to zero in case $7 is NULL. I've tried the below command but doesn't work. Any ideas. thanks guys. MEM=`ps v $PPID| grep -i db2 | grep -v grep| awk '{ if ( $7 ~ " " ) { print 0 } else { print $7}}' ` Harby. (4 Replies)
Discussion started by: hariza
4 Replies
Login or Register to Ask a Question