分页: 2 / 2

Re: awk sed shell

发表于 : 2011-07-01 10:40
lexdene

代码: 全选

#!/bin/bash
awk 'NR==FNR{a[FNR]=$1 ; name[FNR]=$2}NR>FNR&&a[FNR]!=$1 {fail="true";print "匹配失败:"name[FNR]" " $2 " \n退出"; exit} END{ if(fail!="true") print "匹配成功" }' file1.txt file2.txt

Re: awk sed shell

发表于 : 2011-07-01 13:43
mad_frog
恩,我测试了一下,好像不行,有不匹对的情况下,下面的程序依然继续运行。我的意思是如果有不匹配的情况 ,下面的程序都不运行了, 直接退出脚本 类似于 exit 0

Re: awk sed shell

发表于 : 2011-07-01 13:54
lexdene
mad_frog 写了:恩,我测试了一下,好像不行,有不匹对的情况下,下面的程序依然继续运行。我的意思是如果有不匹配的情况 ,下面的程序都不运行了, 直接退出脚本 类似于 exit 0
我测试的时候没有问题。当遇见第一个不匹配的行的时候立即退出。
帖出来你的file1.txt和file2.txt以及你的输出结果。
要求:file1.txt和file2.txt在能够展示问题的情况下要尽可能短。

我的:
file1.txt
1 a
2 b
file2.txt
12 c
22 d
输出结果:
匹配失败:a c
退出
在第一行匹配失败之后立即退出,而没有处理第二行。这是符合你的要求的。

Re: awk sed shell

发表于 : 2011-07-01 14:36
fnan
lz想退出脚本而非退出awk吧,用函数exit(1)就行。
awk '{getline l < "file1.txt";if (substr(l,1,index(l," ")-1) != $1) exit(1)}' file2.txt
。。。
if [[ $? == 。。。
。。。
其他细节可以另行处理。

Re: awk sed shell

发表于 : 2011-07-01 14:46
mad_frog
恩,我测试也是这样的,我的意思是这只是我脚本的一部分,不知道您的意思是不是就是退出整个循环,还是整个脚本都退出了
我的测试结果您看一下
#!/bin/sh
awk 'NR==FNR{a[FNR]=$1 ; name[FNR]=$2}NR>FNR&&a[FNR]!=$1 {fail="true";print "匹配失败:"name[FNR]" " $2 " \n退出"; \
exit} END{ if(fail!="true") print "匹配成功" }' /root/source_md5 /root/dest_md5
ls
echo "hello"

运行结果:
匹配失败:a c
退出
hello

Re: awk sed shell

发表于 : 2011-07-01 16:26
lexdene
fnan 写了:lz想退出脚本而非退出awk吧,用函数exit(1)就行。
awk '{getline l < "file1.txt";if (substr(l,1,index(l," ")-1) != $1) exit(1)}' file2.txt
。。。
if [[ $? == 。。。
。。。
其他细节可以另行处理。
这个说的对。

Re: awk sed shell

发表于 : 2011-07-01 18:00
mad_frog
怎么写啊 :em03

Re: awk sed shell

发表于 : 2011-07-01 18:51
lexdene

代码: 全选

#!/bin/bash
awk 'NR==FNR{a[FNR]=$1 ; name[FNR]=$2}NR>FNR&&a[FNR]!=$1 {fail="true";print "匹配失败:"name[FNR]" " $2 " \n退出"; exit(1) } END{ if(fail!="true") print "匹配成功" }' file1.txt file2.txt
if [ $? -ne "0" ];
then
	exit
fi
echo "hello world!"