Unit testing 在Unix程序中,如何比较同一文件中的两个字符串?
嗨,我必须在unix中编写一个程序,这个程序应该比较同一个文件中的两个字符串, 文件下面包含这两个字符串以及其他在该程序中没有用处的数据, 我必须在文件中检查no(如16)是否在两个字符串中都匹配Unit testing 在Unix程序中,如何比较同一文件中的两个字符串?,unit-testing,shell,unix,Unit Testing,Shell,Unix,嗨,我必须在unix中编写一个程序,这个程序应该比较同一个文件中的两个字符串, 文件下面包含这两个字符串以及其他在该程序中没有用处的数据, 我必须在文件中检查no(如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: l
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
您的
if
语句应符合以下内容:
if [[ $GRP1 -eq $GRP2 ]]
(根据您实际使用的shell,可能会有一些变化,但我认为这些变化可能是最可移植的——如果不起作用,请使用给定shell的手册页来找出正确的格式)
如果
接受命令并检查其返回值。如果您给出的第一个参数不是命令(例如,转换为非命令的环境变量),它将尝试将其作为命令运行,但失败
下面是一个
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)
您的
if
语句应符合以下内容:
if [[ $GRP1 -eq $GRP2 ]]
(根据您实际使用的shell,可能会有一些变化,但我认为这些变化可能是最可移植的——如果不起作用,请使用给定shell的手册页来找出正确的格式)
如果
接受命令并检查其返回值。如果您给出的第一个参数不是命令(例如,转换为非命令的环境变量),它将尝试将其作为命令运行,但失败
下面是一个
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)
除了在另一个答案中解释的if语句外,当通过调用另一个命令在shell中分配变量时,必须对其进行反引号:
GRP1=`grep "Validating" $FILE |cut -d' ' -f2`
GRP2=`grep "Rows valid" $FILE |cut -d' ' -f3`
除了在另一个答案中解释的if语句外,当通过调用另一个命令在shell中分配变量时,必须对其进行反引号:
GRP1=`grep "Validating" $FILE |cut -d' ' -f2`
GRP2=`grep "Rows valid" $FILE |cut -d' ' -f3`
你不必多次使用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
你不必多次使用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