![合并文件并根据 id 字段获取列值](https://linux22.com/image/20959/%E5%90%88%E5%B9%B6%E6%96%87%E4%BB%B6%E5%B9%B6%E6%A0%B9%E6%8D%AE%20id%20%E5%AD%97%E6%AE%B5%E8%8E%B7%E5%8F%96%E5%88%97%E5%80%BC.png)
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
输入文件必须排序。