AWK:处理2个文件不同的字段分隔符 [英] AWK : Processing 2 files with different field separators

查看:833
本文介绍了AWK:处理2个文件不同的字段分隔符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

让我们说我有两个文件:

  $ file1的猫
答:10
B:5-
C:12$ file2的猫
100 A
50 B
42℃

我想有这样的:

  10 100
B 5 50
C 12 42

我试过这样:

 的awk'BEGIN {FS =:} NR == FNR {a [$ 1] = $ 2;接下来} {FS =;打印$ 2,[$ 2] $ 1}'文件1文件2

它输出我说:

  100 A
B 5 50
C 12 42

我想这个问题是来自其设置为第二个文件来不及字段分隔符。我该如何处理呢?

感谢


编辑:一个更一般的情形

使用文件2和文件是这样的:

  $猫文件3
答:10美孚
乙:5条
C:12巴兹

如何获得:

  10美孚100
B 5条50
C 12巴兹42


解决方案

文件之间只需设置FS:

 的awk'...'FS =:文件1 FS =文件2

即:

  $的awk'NR == FNR {a [$ 1] = $ 2;接下来} {打印$ 2,[$ 2,$ 1}'FS =:文件1 FS = 文件2
10 100
B 5 50
C 12 42

Let's say I have 2 files :

$ cat file1
A:10
B:5
C:12

$ cat file2
100 A
50 B
42 C

I'd like to have something like :

A 10 100
B 5 50
C 12 42

I tried this :

awk 'BEGIN{FS=":"}NR==FNR{a[$1]=$2;next}{FS=" ";print $2,a[$2],$1}' file1 file2

Which outputs me that :

  100 A
B 5 50
C 12 42

I guess the problem comes from the Field Separator which is set too late for the second file. How can I handle this ?

Thanks


Edit: a more general case

With file2 and file like this :

$ cat file3
A:10 foo
B:5 bar 
C:12 baz

How to get :

A 10 foo 100
B 5 bar 50
C 12 baz 42

解决方案

Just set FS between files:

awk '...' FS=":" file1 FS=" " file2

i.e.:

$ awk 'NR==FNR{a[$1]=$2;next}{print $2,a[$2],$1}' FS=":" file1 FS=" " file2
A 10 100
B 5 50
C 12 42

这篇关于AWK:处理2个文件不同的字段分隔符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆