首页 > 解决方案 > 如何使用 awk 将 2 个文件合并为第三个文件?

问题描述

谁能告诉我我做错了什么?我有 2 个要合并的文件,从第一个文件中获取信息并将其放入第二个文件,创建第三个文件。

文件 1:

1111-22-33 | 44:55:66 | 7777=8888 | AAAA | BBBB CCCC | DDDD | 11 |

文件 2:

1111-22-33 | 44:55:66 | 7777= |   | AAAA | BBBB CCCC

文件 3 必须如下所示:

1111-22-33 | 44:55:66 | 7777=8888 |   | AAAA | BBBB CCCC | DDDD | 11 |
#!/bin/bash
set -e
awk 'NR==FNR{A[$2]=$3; B[$1]=$2;  next} {print $1,B[$1],A[$2],$4,$5,$6 }' FS="|" OFS="|" $1 $2 > $3
echo "done"

谢谢!

编辑:

@Lety 这是运行代码后的输出:

1111-22-33 | 44:55:66 | 7777=8888 | AAAA | BBBB CCCC | DDDD | 11 |
1111-22-33 | 44:55:66 | 7777=8888 | AAAA | BBBB CCCC | DDDD | 11 |
1111-22-33 | 44:55:66 | 7777= | | AAAA | BBBB CCCC
1111-22-33 | 44:55:66 | 7777= | | AAAA | BBBB CCCC
1111-22-33 ||| | AAAA | BBBB CCCC

标签: awk

解决方案


可能,您可能正在寻找这个,以合并 2 个文件:

awk 'NR==FNR{ for(i=1;i<=NF; i++) a[i]=$i; next }
     { print $1,$2, a[3],$4,$5,$6,a[7] }' FS="|" OFS="|" file1 file2

输出:

1111-22-33 | 44:55:66 | 7777=8888 | | AAAA | BBBB CCCC| 11

但这可能无法满足您的期望,因为我只是对应该发生的事情进行了疯狂的猜测。


推荐阅读