使用awk处理具有不同字段分隔符的2个文件

jrj*_*rjc 5 awk

假设我有2个文件:

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

$ cat file2
100 A
50 B
42 C
Run Code Online (Sandbox Code Playgroud)

我希望有类似的东西:

A 10 100
B 5 50
C 12 42
Run Code Online (Sandbox Code Playgroud)

我试过这个:

awk 'BEGIN{FS=":"}NR==FNR{a[$1]=$2;next}{FS=" ";print $2,a[$2],$1}' file1 file2
Run Code Online (Sandbox Code Playgroud)

哪个输出我:

  100 A
B 5 50
C 12 42
Run Code Online (Sandbox Code Playgroud)

我想这个问题来自于Field Separator,它对于第二个文件来说太迟了.如何为不同的文件(而不是单个文件)设置不同的字段分隔符?

谢谢


编辑:更一般的情况

使用file2和file3,如下所示:

$ cat file3
A:10 foo
B:5 bar 
C:12 baz
Run Code Online (Sandbox Code Playgroud)

如何获得 :

A 10 foo 100
B 5 bar 50
C 12 baz 42
Run Code Online (Sandbox Code Playgroud)

Ed *_*ton 16

只需在文件之间设置FS:

awk '...' FS=":" file1 FS=" " file2
Run Code Online (Sandbox Code Playgroud)

即:

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是文件列表中的设置变量的用途 - 为不同的文件填充不同的初始值.对于其他任何事情,你最好使用`-v`预先设置它们. (2认同)