Chinaunix

标题: awk合并文件问题 [打印本页]

作者: cxfcxf    时间: 2009-03-30 09:36
标题: awk合并文件问题
我2个文件 tmp1.txt tmp2.txt
tmp1.txt
20
18
19

tmp2.txt
15
14
13

我想做个文件tmp3.txt做成
20 15
18 14
19 13
就是把tmp1和tmp2列合并
但是里面没有相同的下标可以做
所以我就想是不是能用NR
awk 'NR==FNR{a[NR]=$1}NR>FNR{$2=a[NR];print }' tmp1.txt tmp2.txt > tmp3.txt
但是貌似这样不行- -
那位大牛帮我理解下- - 昨天刚理解NR FNR的用法..今天就碰到新问题了...
作者: waker    时间: 2009-03-30 09:39
paste tmp1.txt tmp2.txt
作者: HH106    时间: 2009-03-30 09:40
paste更简单
作者: cxfcxf    时间: 2009-03-30 09:42
不是..关键是 如果要用awk该怎么做- -
对于没有相同列的文件
作者: liaosnet    时间: 2009-03-30 09:52
标题: 回复 #4 cxfcxf 的帖子

  1. awk 'NR==FNR{a[NR]=$1;count=NR}NR>FNR{b[NR-count]=$1}END{for(i=1;i<=count;i++)print a[i],b[i]}' tmp1.txt tmp2.txt
复制代码

[ 本帖最后由 liaosnet 于 2009-3-30 10:00 编辑 ]
作者: HH106    时间: 2009-03-30 09:54
原帖由 cxfcxf 于 2009-3-30 09:42 发表
不是..关键是 如果要用awk该怎么做- -
对于没有相同列的文件

awk 'NR==FNR{a[NR]=$0}NR>FNR{print a[FNR],$0}' tmp1.txt tmp2.txt
作者: liaosnet    时间: 2009-03-30 10:01
原帖由 HH106 于 2009-3-30 09:54 发表

awk 'NR==FNR{a[NR]=$0}NR>FNR{print a[FNR],$0}' tmp1.txt tmp2.txt


嗯.更高效...
作者: cxfcxf    时间: 2009-03-30 10:16
晕...那我理解错了??
NR 和 FNR的关系- -谁说下..我看个那个基础十三篇..里面就演示了NR  和2个的解释 但是很难理解..
我是看程序看明白用处的..
但是..还是不是很理解..
为什么我的
awk 'NR==FNR{a[NR]=$1}NR>FNR{$2=a[NR];print }' tmp1.txt tmp2.txt > tmp3.txt
不对..
后面a[NR]数组 为啥改成FNR下标....

FNR大概就是第一个文件的读入行数
NR就是全部的读入行数 会改变
当NR=FNR时 表示使用第一个文件
当NR>FNR时 表示使用第二个文件
但是为啥后者用FNR做下标- - 而第一个数组就NR
为什么第二个不能用NR做下标

F N R支持a w k目前操作的记录数。其变量值小于等于N R。如果脚本正在访问许多文件,每一新输入文件都将重新设置此变量。
这是原话- -
作者: ywlscpl    时间: 2009-03-30 10:17
楼主还没弄清NR和FNR

awk 'NR==FNR{a[NR]=$1}NR>FNR{$2=a[FNR];print }' tmp1.txt tmp2.txt > tmp3.txt
作者: ubuntuer    时间: 2009-03-30 10:23
LS正解
作者: cxfcxf    时间: 2009-03-30 10:32
f1:

a
b
c
d

f2:
e
f
g

awk '{printf("file->[%s] NR->[%d] FNR->[%d] str->[%s]\n", FILENAME, NR, FNR, $0)}' f1 f2output:

file->[f1] NR->[1] FNR->[1] str->[a]
file->[f1] NR->[2] FNR->[2] str->
file->[f1] NR->[3] FNR->[3] str->[c]
file->[f1] NR->[4] FNR->[4] str->[d]
file->[f2] NR->[5] FNR->[1] str->[e]
file->[f2] NR->[6] FNR->[2] str->[f]
file->[f2] NR->[7] FNR->[3] str->[g]

网上找了下- -看到一个很强的解释..这个很好....懂了....




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2