分页: 1 / 2

awk sed shell

发表于 : 2011-06-29 16:07
mad_frog
大家帮我看下,有2文件file1.txt file2.txt
现在要匹对第一列的值,如果两文件同行都相等,则输出所有文件匹对成功,如果不同,比如1.txt和8.txt不同则输出1.txt与8.txt匹配不成功,多些判断写成shell写最好了
file1.txt
d41d8cd98f00b204e9800998ecf8427e 1.txt
16f70446d4ca7709c4eae4ec83e3c1d4 2.txt
d41d8cd98f00b204e9800998ecf8427e 3.txt
d41d8cd98f00b204e9800998ecf8427e 4.txt
c3477453c799add3a2b09032b26a7271 5.txt
4cf3401fca7f9fe2703b31ba32675b10 6.txt
13f20a6d6c469e7dfd05e78d34c743c9 7.txt
file2.txt
d41d8cd98f00b204e9800998ecf8427e 8.txt
16f70446d4ca7709c4eae4ec83e3c1d4 9.txt
d41d8cd98f00b204e9800998ecf8427e 10.txt
d41d8cd98f00b204e9800998ecf8427e 11.txt
c3477453c799add3a2b09032b26a7271 12.txt
4cf3401fca7f9fe2703b31ba32675b10 13.txt
13f20a6d6c469e7dfd05e78d34c743c9 14.txt

Re: awk sed

发表于 : 2011-06-29 16:15
mad_frog
用shell写哈,别的不懂!!呵呵

Re: awk sed

发表于 : 2011-06-29 16:38
lexdene
这个我会,你等着。
不过问一句,不用sed和awk行不?

Re: awk sed

发表于 : 2011-06-29 16:57
lexdene

代码: 全选

awk 'NR==FNR{a[FNR]=$1}NR>FNR&&a[FNR]==$1 {print FNR " " $1 " success"}' file1.txt file2.txt

Re: awk sed

发表于 : 2011-06-30 10:42
mad_frog
:em11

Re: awk sed

发表于 : 2011-06-30 11:09
fnan
awk '{getline l < "file1.txt"; if (substr(l,1,index(l," ")-1) == $1) print NR,$1}' file2.txt

Re: awk sed

发表于 : 2011-06-30 11:42
lexdene
fnan 写了:awk '{getline l < "file1.txt"; if (substr(l,1,index(l," ")-1) == $1) print NR,$1}' file2.txt
围观各种awk大牛。

Re: awk sed shell

发表于 : 2011-06-30 13:11
lexdene

代码: 全选

#!/usr/bin/awk -f
NR==FNR{a[FNR]=$1 ; name[FNR]=$2}
NR>FNR&&a[FNR]==$1 {print "匹配成功:"name[FNR]" " $2}
NR>FNR&&a[FNR]!=$1 {print "匹配失败:"name[FNR]" " $2}

Re: awk sed shell

发表于 : 2011-06-30 13:24
lexdene

代码: 全选

#!/bin/bash
awk 'NR==FNR{a[FNR]=$1 ; name[FNR]=$2}NR>FNR&&a[FNR]==$1 {print "匹配成功:"name[FNR]" " $2}NR>FNR&&a[FNR]!=$1 {print "匹配失败:"name[FNR]" " $2}' file1.txt file2.txt

Re: awk sed shell

发表于 : 2011-06-30 15:16
lexdene
file1.txt
d41d8cd98f00b204e9800998ecf84271 1.txt
16f70446d4ca7709c4eae4ec83e3c1d4 2.txt
d41d8cd98f00b204e9800998ecf8427e 3.txt
d41d8cd98f00b204e9800998ecf8427e 4.txt
c3477453c799add3a2b09032b26a7271 5.txt
4cf3401fca7f9fe2703b31ba32675b10 6.txt
13f20a6d6c469e7dfd05e78d34c743c9 7.txt
file2.txt
d41d8cd98f00b204e9800998ecf8427e 8.txt
16f70446d4ca7709c4eae4ec83e3c1d4 9.txt
d41d8cd98f00b204e9800998ecf8427e 10.txt
d41d8cd98f00b204e9800998ecf8427e 11.txt
c3477453c799add3a2b09032b26a7271 12.txt
4cf3401fca7f9fe2703b31ba32675b10 13.txt
13f20a6d6c469e7dfd05e78d34c743c9 14.txt
shell程序

代码: 全选

#!/bin/bash
awk 'NR==FNR{a[FNR]=$1 ; name[FNR]=$2}NR>FNR&&a[FNR]==$1 {print "匹配成功"}NR>FNR&&a[FNR]!=$1 {print "匹配失败:"name[FNR]" " $2}' file1.txt file2.txt
执行结果
匹配失败:1.txt 8.txt
匹配成功
匹配成功
匹配成功
匹配成功
匹配成功
匹配成功

Re: awk sed shell

发表于 : 2011-06-30 16:50
lexdene

代码: 全选

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

Re: awk sed shell

发表于 : 2011-06-30 16:57
mad_frog
:em11

Re: awk sed shell

发表于 : 2011-06-30 18:50
lexdene
mad_frog 写了::em11
谢谢!

Re: awk sed shell

发表于 : 2011-07-01 9:14
lexdene
mad_frog 写了:文章标题: awk sed shell
lexdene 写了:
mad_frog 写了::em11
谢谢!
呵呵,我还有一个问题,就是我想实现当有输出匹配不成功的情况下脚本就不继续运行下去,我在后面写的是
if [ $? -eq 0 ];then
status="成功"
else status="失败"
exit 0
fi
可是我测试的时候有匹配失败的情况$?的值也是0
1、awk匹配成功与匹配失败返回值都是0。通过$?不能够判断匹配失败。
2、大娘,能不能不要给我发短消息。直接在这个帖子里面回呗。大家都能看见。也许有别的高手想帮你呢。

Re: awk sed shell

发表于 : 2011-07-01 10:09
mad_frog
好的,那有什么方法实现呢?