在Unix程序中如何比较同一个文件中的两个字符串?

时间:2011-02-02 09:03:18

标签: unit-testing shell unix

您好我必须在unix中编写一个程序,这个程序应该比较同一个文件中的两个字符串, 文件包含这两个字符串以及其他在此程序中没用的数据, 如果两个字符串中没有(例如16)匹配,我必须检查文件。

Validating 16 transactions.
Rows valid: 16.

给出错误

1.prog: line 5: Validating: command not found
1.prog: line 6: Rows valid: command not found
1.prog: line 7: GRP1: command not found


NOT DONE
1.prog: line 11: =: command not found

以下是代码:

#!/bin/sh
POINT='.'
for FILE in $HOME/l26026363.txt
do
  GRP1=grep "Validating" $FILE |cut -d' ' -f2
  GRP2=grep "Rows valid" $FILE |cut -d' ' -f3
  GRP1 =$GRP1$POINT
  echo $GRP1
  echo $GRP2 
  echo NOT DONE 
  if $GRP1 = $GRP2
   then  echo "IN IF"
   #mv FILE /home/appltest/test_dir
   fi
done

3 个答案:

答案 0 :(得分:3)

您的if声明应该符合以下方式:

if [[ $GRP1 -eq $GRP2 ]]

(根据你实际使用的shell有一些变化,但我认为那些可能是最便携的 - 如果不起作用,请使用给定shell的联机帮助页找出正确的格式。)< / p>

if接受命令并检查其返回值。如果您提供的第一个参数不是命令(例如,转换为非命令的环境变量),它将尝试将其作为命令运行并失败。


以下是bash脚本的成绩单:

pax$ cat qq.bash
#!/bin/bash

GRP1=$(expr 22 + 3)
GRP2=$(expr 100 / 4)
GRP3=$(expr 75 - 5)

if [[ $GRP1 -eq $GRP2 ]] ; then
    echo "GRP1 and GRP2 are equal ($GRP1)"
else
    echo "GRP1 and GRP2 are unequal ($GRP1, $GRP2)"
fi

if [[ $GRP1 -eq $GRP3 ]] ; then
    echo "GRP1 and GRP3 are equal ($GRP1)"
else
    echo "GRP1 and GRP3 are unequal ($GRP1, $GRP3)"
fi

pax$ ./qq.bash
GRP1 and GRP2 are equal (25)
GRP1 and GRP3 are unequal (25, 70)

答案 1 :(得分:0)

除了在另一个答案中解释的if语句之外,当通过调用另一个命令在shell中分配变量时,你必须反引它:

GRP1=`grep "Validating" $FILE |cut -d' ' -f2`
GRP2=`grep "Rows valid" $FILE |cut -d' ' -f3`

答案 2 :(得分:0)

您不必多次使用grep。这是浪费过程。使用awk

for....
do    
    awk -vfile=$FILE '/Validating/{s1=$2}/Rows valid/{s2=$NF+0}
    END{
        if ( s1==s2 ){
          cmd="mv "file" /home/appltest/test_dir"
          system(cmd)
        }
    }' $FILE
done