awk sed shell
-
- 帖子: 55
- 注册时间: 2011-06-29 11:26
awk sed shell
大家帮我看下,有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
现在要匹对第一列的值,如果两文件同行都相等,则输出所有文件匹对成功,如果不同,比如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
上次由 mad_frog 在 2011-06-30 12:09,总共编辑 1 次。
-
- 帖子: 55
- 注册时间: 2011-06-29 11:26
Re: awk sed
用shell写哈,别的不懂!!呵呵
- lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
- 联系:
Re: awk sed
这个我会,你等着。
不过问一句,不用sed和awk行不?
不过问一句,不用sed和awk行不?
大连Linux User Group: http://groups.google.com/group/dalian-lug?hl=zh-CN
- lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
- 联系:
Re: awk sed
代码: 全选
awk 'NR==FNR{a[FNR]=$1}NR>FNR&&a[FNR]==$1 {print FNR " " $1 " success"}' file1.txt file2.txt
大连Linux User Group: http://groups.google.com/group/dalian-lug?hl=zh-CN
-
- 帖子: 55
- 注册时间: 2011-06-29 11:26
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: awk sed
awk '{getline l < "file1.txt"; if (substr(l,1,index(l," ")-1) == $1) print NR,$1}' file2.txt
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
- lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
- 联系:
Re: awk sed
围观各种awk大牛。fnan 写了:awk '{getline l < "file1.txt"; if (substr(l,1,index(l," ")-1) == $1) print NR,$1}' file2.txt
大连Linux User Group: http://groups.google.com/group/dalian-lug?hl=zh-CN
- lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
- 联系:
Re: awk sed shell
代码: 全选
#!/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}
大连Linux User Group: http://groups.google.com/group/dalian-lug?hl=zh-CN
- lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
- 联系:
Re: awk sed shell
代码: 全选
#!/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
大连Linux User Group: http://groups.google.com/group/dalian-lug?hl=zh-CN
- lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
- 联系:
Re: awk sed shell
file1.txt
执行结果
file2.txtd41d8cd98f00b204e9800998ecf84271 1.txt
16f70446d4ca7709c4eae4ec83e3c1d4 2.txt
d41d8cd98f00b204e9800998ecf8427e 3.txt
d41d8cd98f00b204e9800998ecf8427e 4.txt
c3477453c799add3a2b09032b26a7271 5.txt
4cf3401fca7f9fe2703b31ba32675b10 6.txt
13f20a6d6c469e7dfd05e78d34c743c9 7.txt
shell程序d41d8cd98f00b204e9800998ecf8427e 8.txt
16f70446d4ca7709c4eae4ec83e3c1d4 9.txt
d41d8cd98f00b204e9800998ecf8427e 10.txt
d41d8cd98f00b204e9800998ecf8427e 11.txt
c3477453c799add3a2b09032b26a7271 12.txt
4cf3401fca7f9fe2703b31ba32675b10 13.txt
13f20a6d6c469e7dfd05e78d34c743c9 14.txt
代码: 全选
#!/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
匹配成功
匹配成功
匹配成功
匹配成功
匹配成功
匹配成功
大连Linux User Group: http://groups.google.com/group/dalian-lug?hl=zh-CN
- lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
- 联系:
Re: awk sed shell
代码: 全选
#!/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
大连Linux User Group: http://groups.google.com/group/dalian-lug?hl=zh-CN
-
- 帖子: 55
- 注册时间: 2011-06-29 11:26
- lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
- 联系:
Re: awk sed shell
谢谢!mad_frog 写了:牛
大连Linux User Group: http://groups.google.com/group/dalian-lug?hl=zh-CN
- lexdene
- 帖子: 434
- 注册时间: 2010-02-21 16:19
- 来自: 大连
- 联系:
Re: awk sed shell
1、awk匹配成功与匹配失败返回值都是0。通过$?不能够判断匹配失败。mad_frog 写了:文章标题: awk sed shell
呵呵,我还有一个问题,就是我想实现当有输出匹配不成功的情况下脚本就不继续运行下去,我在后面写的是lexdene 写了:谢谢!mad_frog 写了:牛
if [ $? -eq 0 ];then
status="成功"
else status="失败"
exit 0
fi
可是我测试的时候有匹配失败的情况$?的值也是0
2、大娘,能不能不要给我发短消息。直接在这个帖子里面回呗。大家都能看见。也许有别的高手想帮你呢。
大连Linux User Group: http://groups.google.com/group/dalian-lug?hl=zh-CN
-
- 帖子: 55
- 注册时间: 2011-06-29 11:26
Re: awk sed shell
好的,那有什么方法实现呢?