合并文件并根据 id 字段获取列值

合并文件并根据 id 字段获取列值
bash-3.2$ cat sample.log sample.log.1 sample.log.2
ID COL1 COL2 COL4
1  col1 col2 col4
2  c1   c2   c4
3  co1  co2  co4

ID COL3 COL1
1  col3 col1
2  c3   c1
3  co3  co1

ID COL1 COL2 COL3
1  col1 col2 col3
2  c1  c2   c3
3  co1  co2  co3

我需要编写一个 awk 脚本,以便它为我提供特定 id 的列值,就像对数据库中的多个表进行选择查询一样。

给我 id 1 的 col1 col2 和 col3 字段,并且不应重复结果。意味着结果应该是这样的

The result should be
ID COL1 COL2 COL3
1  col1 col2 col3

但不是

The result should be
ID COL1 COL2 COL3 COL3
1  col1 col2 col3 col3

即使是一个建议也是好的。

awk ' BEGIN { while ( (getline line < "sample.log") > 0 ) {ids[substr(line,1,index(line," ")-1)];} } { // get the column values here based on the stored id's .. } ' sample.log sample.log.1 sample.log.2

我正在尝试做类似上面提到的事情。我不确定这是否是一个好主意。

答案1

您可以使用以下join命令来执行此任务:

join -1 1 -2 1 sample.log sample.log.1 -o 1.1,1.2,1.3,2.2

输出将以“单个空格”分隔,但您可以使用 awk 将其重新格式化为列对齐。

请注意,join输入文件必须排序。

相关内容