File and if statement comparisons


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers File and if statement comparisons
# 1  
Old 04-23-2013
File and if statement comparisons

I'd love to get help on this one please. Ok so say I have a file called README with lines such as this:

Code:
index:index.html
required:file1.1:file2.1:file3.1

I'm having trouble with writing an if statement that compares the items in a list with a file inside README, what I imagine in my head is something like

Code:
list=`ls`

for f in $list
do
  if [ -f $f != ??? ] ; then
   .....
  fi
done

I'm having trouble with the "???" part, as in I don't know what kind of code or one liner I can put in there that would compare file $f with indext.html, file1.1, file2.1 and file3.1

Any suggestions would be apretiated
# 2  
Old 04-23-2013
Sticking with your framework, here is one possible solution which uses awk to reformat all fields after first column on a line of its own and then grep to check if a match(untested):

Code:
list=`ls`
awk -F: '{for(i=2;i<=NF;i++) {printf $i"\n"}}' readme > matchfile
for f in $list
do
  grep $f matchfile
  if [ $? -eq 0 ]; then
    echo 'found match......' $f
  fi
done

# 3  
Old 04-23-2013
If I understand what you're trying to do, the following seems to work:
Code:
sed -n '/^required:/{
s///
s/:/\
/gp
}' README | while IFS="" read -r f
do      if [ -f "$f" ]
        then    printf "\"%s\" is a regular file.\n" "$f"
        else    printf "\"%s\" is not a regular file.\n" "$f"
        fi
done

Some versions of sed will allow you to use "\n" in the replacement string in a sed substitute command, but that is not portable. The command in this sed script:
Code:
s/:/\
/gp

must have a literal <newline> character immediately following the backslash character (\) to work properly.

When run in a directory with the README file you supplied and with regular files named file1.1 and file2.1, a directory named file3.1, and a few other files; the script above produces the output:
Code:
"file1.1" is a regular file.
"file2.1" is a regular file.
"file3.1" is not a regular file.

# 4  
Old 04-23-2013
Quote:
Originally Posted by mjf
Sticking with your framework, here is one possible solution which uses awk to reformat all fields after first column on a line of its own and then grep to check if a match(untested):

Code:
list=`ls`
awk -F: '{for(i=2;i<=NF;i++) {printf $i"\n"}}' readme > matchfile
for f in $list
do
  grep $f matchfile
  if [ $? -eq 0 ]; then
    echo 'found match......' $f
  fi
done

Can you explain to me what the line
Code:
if [ $? -eq 0 ]

means? I'm still fairly new with unix and there's so much to learn in like everything, but from my current understanding it's saying "if....something(don't know what that is) is equal to zero then it finds a match"?
# 5  
Old 04-23-2013
$? is the exit status of the last command, in this case the grep. So if grep found a match, the exit status is 0, otherwise it will be some number other than 0 (e.g. 1 if no match was found, 2 if an error).
# 6  
Old 04-24-2013
Quote:
Originally Posted by mjf
Sticking with your framework, here is one possible solution which uses awk to reformat all fields after first column on a line of its own and then grep to check if a match(untested):

Code:
list=`ls`
awk -F: '{for(i=2;i<=NF;i++) {printf $i"\n"}}' readme > matchfile
for f in $list
do
  grep $f matchfile
  if [ $? -eq 0 ]; then
    echo 'found match......' $f
  fi
done

So I ran that code and it works, the only thing I'd like to have happen is to run grep silently rather than it echoing the files out on the terminal
# 7  
Old 04-24-2013
Code:
grep -q $f matchfile

 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

String regex comparisons

Here is the sample code: str1="abccccc" str2="abc?" if ]; then echo "same string" else echo "different string" fi Given that ? implies 0 or 1 match of preceding character, I was expecting the output to be "different string", but I am seeing "same string". Am I not using the... (3 Replies)
Discussion started by: Rameshck
3 Replies

2. Shell Programming and Scripting

File comparisons

Hi all, I want to compare two files based on column value Kindly help me a.txt 123,ABCD 456,DEF 789,SDF b.txt 123,KJI 456,LMN 321,MJK 678,KOL Output file should be like Common on both files c.txt 123,ABCD,KJI (8 Replies)
Discussion started by: aaysa123
8 Replies

3. Shell Programming and Scripting

Pair wise comparisons

Hi, I have 25 groups and I need to perform all possible pairwise compariosns between them using the formula n(n-1)/2. SO in my case it will be 25(25-1)/2 which is equal to 300 comparisons. my 25 groups are FG1 FG2 FG3 FG4 FG5 NT5E CD44 CD44 CD44 AXL ADAM19 CCDC80 L1CAM L1CAM CD44... (1 Reply)
Discussion started by: Diya123
1 Replies

4. UNIX for Dummies Questions & Answers

Date comparisons

Hi, I want to perform a simple date comparisons, i.e. select all files modified after a certain date (say 12-feb-2011) I do not have the option of creating a file and using find's -newer option. Any simple way to do this? I can do this by reading the stat command's output and comparing... (10 Replies)
Discussion started by: jawsnnn
10 Replies

5. Shell Programming and Scripting

String comparisons

Can someone please tell me what is wrong with this stings comparison? #!/bin/sh #set -xv set -u VAR=$(ping -c 5 -w 10 google.com | grep icmp_req=5 | awk '{print $6}') echo I like cookies echo $VAR if "$VAR" == 'icmp_req=5' then echo You Rock else echo You Stink fiThis is the error.... (6 Replies)
Discussion started by: cokedude
6 Replies

6. UNIX for Dummies Questions & Answers

Command comparisons

Hi guys, Im trying to figure out what is the difference between using a | and the command xargs ... examples of usage: 1) ls * | wc -w => this gives you the number of files in the current directory including all subdirectories 2) find . “*.log” | xargs grep ERROR => this gives... (6 Replies)
Discussion started by: avidrunner
6 Replies

7. Shell Programming and Scripting

Best practice for bracket comparisons?

So, I have no formal higher education in programming at all and am self taught. I am now wondering what would be considered best practices? Like should I hard code a variable, then compare it to what I want to know or achieve, or should I just put the commands with in the brackets? Example, a... (5 Replies)
Discussion started by: tlarkin
5 Replies

8. Shell Programming and Scripting

numeric range comparisons

I have two files.And a sort of matrix analysis. Both files have a string followed by two numbers: File 1: A 2 7 B 3 11 C 5 10 ...... File 2: X 1 10 Y 3 5 Z 5 9 What I'd like to do is for each set of numbers in the second file indicate if the first or second number (or both) in... (7 Replies)
Discussion started by: dcfargo
7 Replies

9. UNIX for Dummies Questions & Answers

Can grep do numerical comparisons?

Say for example I have a list of numbers.. 5 10 13 48 1 could I use grep to show only those numbers that are above 10? For various reasons I can only use grep... not awk or sed etc. (7 Replies)
Discussion started by: Uss_Defiant
7 Replies

10. Shell Programming and Scripting

Script to automate file comparisons

Hi, I need a script that loops through all the files two directories passed to it via parameter, and if two files have the same name, do a cmp comparison on the files. If the files are different, output the specifics returned by cmp. What's the best way to go about writing this, as I am a... (6 Replies)
Discussion started by: herman404
6 Replies
Login or Register to Ask a Question