正在查找用于以下任务的命令:
我有三个文件,每个文件有两列,如下所示。我想创建四列的file4
。
输出应类似于file1
、file2
和file3
的合并排序版本,其中第一列已排序,第二列是file1
的第二列,第三列是file2
的第二列,第四列是file3
的第二列。
列2到3中的条目不应排序,但应与原始文件第一列中的 key 值匹配。
我在Linux中尝试了交集,但没有给出所需的输出。
任何帮助将不胜感激。提前感谢!!
$ cat -- file1
A1 B5
A10 B2
A3 B15
A15 B6
A2 B10
A6 B19
$ cat -- file2
A10 C4
A4 C8
A6 C5
A3 C10
A12 C14
A15 C18
$ cat -- file 3
A3 D1
A22 D9
A20 D3
A10 D5
A6 D10
A21 D11
$ cat -- file 4
col1 col2 col3 col4
A1 B5
A2 B10
A3 B15 C10 D1
A4 C8
A6 B19 C5 D10
A10 B2 C4 D5
A12 C14
A15 B6 C18
A20 D3
A21 D11
A22 D9
4条答案
按热度按时间okxuctiv1#
Awk + Bash版本:
纯Bash版本:
"${a[$key]:-, , }${a[$key]:+, }$value"
的解释,请检查 shell -参数-扩展o3imoua42#
使用GNU Awk:
lx0bsm1f3#
有一个名为
join
的简单工具可用于执行此操作:此输出
我使用
---
来表示一个空字段,如果你想漂亮地打印它,你必须用awk或其他东西重新解析它。j5fpnvbx4#
这可能对你有用(GNU sed和sort):
用制表符替换空格,并根据正在处理的文件在键和值之间插入制表符的数量。
按键列顺序对输出进行排序。
将每行与其键合并并打印结果。