awk处理合并两个文件,急...

例如这两个文件文件1116t1117t2118t3文件211610001171500118800我想要的结果是文件2中的第一个字段即(116,117,118)和文件1中的... 例如这两个文件
文件1
116 t1
117 t2
118 t3
文件2
116 1000
117 1500
118 800
我想要的结果是
文件2中的第一个字段即(116,117,118)和文件1中的第一个字段即(116,117,118)每行进行对比如果相同的话 替换成下面这样的
t1 1000
t2 1500
t3 118
t3 118 写错了 不是118 应该是800

如果要是让1个文件的每行的第二个字段、第三个字段和另外一个文件的第二个字段、第三个字段相减呢
file1 :
a 2 3
b 4 5
file2:
a 5 6
b 8 9
想要的结果是
a 3 3
b 4 4
展开
 我来答
hrcq89
2012-05-28 · TA获得超过111个赞
知道小有建树答主
回答量:53
采纳率:100%
帮助的人:59.3万
展开全部

假设现有下面4个文件:

file1:           file2:                                             file3:        file4: 

116  t1       116  1000                                     100 t1     115 600

117  t2       117  1500                                     105 t2     100 700

118  t3       118  800                                       110 t3     110 800

                                                                       115 t4     105 900

                                                                                      200 300

1. 比较file1和file2: (下面是一行命令,非两行)

awk 'FILENAME==ARGV[1]{a[FNR]=$1;b[FNR]=$2};FILENAME==ARGV[2]{for(i=1;i<=length(a);i++){if(a[i]==$1){print b[i],$2}}}' file1 file2 | sort -u

结果:

t1 1000

t2 1500

t3 800

2. 比较file3和file4: (下面是一行命令, 非两行)

awk 'FILENAME==ARGV[1]{a[FNR]=$1;b[FNR]=$2};FILENAME==ARGV[2]{for(i=1;i<=length(a);i++){if(a[i]==$1){print b[i],$2}}}' file3 file4 | sort -u

结果:

t1 700

t2 900

t3 800

t4 600

执行情况见下面截图:

__________________________________________________________________________

补充:    

“我想要的结果是

文件2中的第一个字段即(116,117,118)和文件1中的第一个字段即(116,117,118)每行进行对比如果相同的话 替换成下面这样的 

t1 1000 

t2 1500

t3 118 “

——————————————————————————————————————————

如果不同的话需不需要展示出来?

上面的命令是只展示匹配到的

如果想把  不匹配的也展示出来, 用下面的命令:

awk 'FILENAME==ARGV[1]{a[FNR]=$1;b[FNR]=$2};FILENAME==ARGV[2]{for(i=1;i<=length(a);i++){if(a[i]==$1){$1=b[i]}};print $1,$2}' file3 file4 | sort -u

结果

200 300

t1 700

t2 900

t3 800

t4 600

更多追问追答
追问
如果要是让1个文件的每行的第二个字段、第三个字段和另外一个文件的第二个字段、第三个字段相减呢 
file1 :
a 2 3
b 4 5
file2:
a 5 6
b 8 9
想要的结果是
a 3 3
b 4 4
追答
下面这个命令展示的相应字段相减的绝对值
awk 'NR==FNR{a[FNR]=$2;b[FNR]=$3}NR!=FNR{c[FNR]=($2-a[FNR]<0?a[FNR]-$2:$2-a[FNR]);d[FNR]=(b[FNR]-$3<0?$3-b[FNR]:b[FNR]-$3);print $1,c[FNR],d[FNR]}' file1 file2

如果第一字段需要比对,
像前面一样在外围加上条件.
小米飞猫
2012-05-27 · 专注于IT监控领域技术
小米飞猫
采纳数:1653 获赞数:4811

向TA提问 私信TA
展开全部

awk 'NR==FNR{a[$1]=$2}NR!=FNR{print a[$1]" "$2}' file1 file2

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式