代码: 全选
#!/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
代码: 全选
#!/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
我测试的时候没有问题。当遇见第一个不匹配的行的时候立即退出。mad_frog 写了:恩,我测试了一下,好像不行,有不匹对的情况下,下面的程序依然继续运行。我的意思是如果有不匹配的情况 ,下面的程序都不运行了, 直接退出脚本 类似于 exit 0
file2.txt1 a
2 b
输出结果:12 c
22 d
在第一行匹配失败之后立即退出,而没有处理第二行。这是符合你的要求的。匹配失败:a c
退出
这个说的对。fnan 写了:lz想退出脚本而非退出awk吧,用函数exit(1)就行。
awk '{getline l < "file1.txt";if (substr(l,1,index(l," ")-1) != $1) exit(1)}' file2.txt
。。。
if [[ $? == 。。。
。。。
其他细节可以另行处理。
代码: 全选
#!/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!"