- 论坛徽章:
- 0
|
原帖由 爱知 于 2008-12-27 17:55 发表 ![]()
awk -F '[ :]+' 'FNR==NR{a[$0]=1}FNR!=NR && ($1 in a){sub(/[^:]*:/,"");print $0}' 2.txt 1.txt
awk -F '[ :]+' 'FNR==NR{a[$0]=1}FNR!=NR && ($1 in a){print $0}' 2.txt 1.txt
先解释一下FNR与NR的区别吧
FNR表示当前文件的记录数 NR表示到此为止的记录数
对于单个文件NR 和FNR 的输出结果一样的
# awk '{print NR,$0}' file1
1 a b c d
2 a b d c
3 a c b d
4 a c d b
5 a d c b
6 a d b c
awk '{print FNR,$0}' file1
1 a b c d
2 a b d c
3 a c b d
4 a c d b
5 a d c b
6 a d b c
但是对于多个文件 :
# awk '{print NR,$0}' file1 file2
1 a b c d
2 a b d c
3 a c b d
4 a c d b
5 a d c b
6 a d b c
7 aa bb cc dd
8 aa bb dd cc
9 aa cc bb dd
10 aa cc dd bb
11 aa dd bb cc
12 aa dd cc bb
# awk '{print FNR,$0}' file1 file2
1 a b c d
2 a b d c
3 a c b d
4 a c d b
5 a d c b
6 a d b c
1 aa bb cc dd
2 aa bb dd cc
3 aa cc bb dd
4 aa cc dd bb
5 aa dd bb cc
6 aa dd cc bb
[test@erpdataserver ~]$ awk -F '[ :]+' '{print}' 2.txt 1.txt
bcd
efd
des
abc : 123 : 456 : ...
bcd : 234 : 432 : ...
efd : 324 : 322 : ....
egd : 234 : 233 : ...
dfe : 234 : 345 : ..
des : 233 :326 : ...
然后解释一下这一句吧
awk -F '[ :]+' 'FNR==NR{a[$0]=1}FNR!=NR && ($1 in a){print $0}' 2.txt 1.txt
以一个或者多个空格或者:为记录分隔符
因为2.txt在前面,所以当FNR=NR 就是说当前文件的记录数以记录数一样的时候,下面这三行满足条件,也就是2.txt文件内容
bcd
efd
des
把$0也就是bcd efd des赋值给数组a
如果FNR!=NR 成立的话 下面这些满足条件,也就是1.txt文件
abc : 123 : 456 : ...
bcd : 234 : 432 : ...
efd : 324 : 322 : ....
egd : 234 : 233 : ...
dfe : 234 : 345 : ..
des : 233 :326 : ...
根据数组a来打印满足条件的行记录。
不知道有没有人看懂了。。。。。。。
如有不当,请指正,谢谢。
[ 本帖最后由 我是DBA 于 2008-12-27 21:20 编辑 ] |
|