AWK:处理2个文件不同的字段分隔符 [英] AWK : Processing 2 files with different field separators
本文介绍了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屋!
查看全文