Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2049873
  • 博文数量: 354
  • 博客积分: 4955
  • 博客等级: 上校
  • 技术积分: 4579
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-21 11:46
文章分类

全部博文(354)

文章存档

2015年(1)

2013年(4)

2012年(86)

2011年(115)

2010年(67)

2009年(81)

我的朋友

分类:

2010-03-10 11:12:23

有两个文本
file1内容如下:
qqqq
wwww
eeee
rrrr
....
eeee

file2内容如下:
1111
3333
2222
5555
....
0000

要求合并两个文档并排列组合:
qqqq&1111
qqqq&3333
qqqq&2222
......
eeee&0000

写了个脚本:
#!/bin/bash
file1=$1
file2=$2
while read line1
do
        while read line2
        do
                echo $line1"&"$line2
        done<$file2
done<$file1

得到了想要的结果,后来跟轩尼诗、ocean交流了一下,让俩高人给优化了一下:

 awk 'NR==FNR{a[NR]=$0}NR!=FNR{for(i in a)print $0"&"a[i]}'

一句就搞定了!!

学习了一下,这句涉及到awk对多个文件的操作,关键之处就在于对NR和FNR的使用:

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

阅读(918) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~