您好我必须在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
答案 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