我有两个这种形式的文件:
File1: id:0.0260509118455
File2: id:X:Y
我想要获得第三个文件,其中 file1 的所有行与包含相同 id 的第二个文件的行相连。 IE :
File3: id:0.0260509118455:X:Y
(文件 1 有 100 行,文件 2 有 666 行)。不存在不可配对的线路
答案1
要连接包含数据库表的文件,请join
在按键顺序对表进行排序后使用以下命令:
排序 -b -t : 文件 1 > 排序文件 1 排序 -b -t : 文件 2 > 排序文件 2 join -t : 排序文件1 排序文件2
进一步阅读
- “公用事业:加入”。 外壳命令语言。单一 UNIX 规范。第 7 期。IEEE 1003.1。 2016。公开组。
- 使用公共列值合并文件
答案2
您应该能够使用“粘贴”命令来执行此操作。它读取列而不是行。
awk -F: '{ print $2}' File2 > File4
删除 id: 标签
然后
paste File1 File4 > File3
应该做这项工作。
答案3
您还可以使用 awk 来完成此操作,检查 id,而不需要以任何方式对文件进行排序或预处理:
awk -F: 'NR==FNR{a[$1]=$0;next}$1 in a {print a[$1],$2,$3}' OFS=: file1 file2 >file3
PS:为了获得性能,小文件(文件1 100行)首先加载到内存中,然后将大文件与内存进行比较。