我需要比较 2 个 csv 文件并对第二列进行修改。我写出了我想要如何实现这一点的逻辑,但是,它似乎比我想要的更困惑线程,所以我只写出示例。
任何帮助将不胜感激。提前谢谢。
文件1
user1,distinguishedName1
user2,distinguishedName2
user3,distinguishedName3
user4,distinguishedName4
user5,distinguishedName5
文件2
user1,distinguishedName1
user3,distinguishedName13
user5,distinguishedName12
user6,distinguishedName4
期望的结果:
user1,distinguishedName1
user2,distinguishedName2
user3,distinguishedName13
user4,distinguishedName4
user5,distinguishedName12
user6,distinguishedName4
使用join
命令与awk
命令结合使用的解决方案:
join -t',' -j1 -a1 -a2 file1 file2 | awk -F',' '{if(NF==3) $0=$1FS$3}1'
输出:
user1,distinguishedName1
user2,distinguishedName2
user3,distinguishedName13
user4,distinguishedName4
user5,distinguishedName12
user6,distinguishedName4
解释:
-- 对于连接命令:
-t','
- 定义字段分隔符
-j1
- 告诉加入第一个字段1
-a FILENUM
- 打印来自文件 FILENUM 的不可配对行,其中 FILENUM 为 1 或 2,对应于 FILE1 或 FILE2
-- 对于 awk 命令:
NF
- 包含字段总数
FS
- 字段分隔符(即 ,
(
if(NF==3) $0=$1FS$3
- 条件,检查是否有补码第三个字段(由于将文件与公共的第一个字段连接在一起(来执行替换
https://linux.die.net/man/1/join
awk
救援!
awk -F, '!a[$1]++' file2 file1
user1,distinguishedName1
user3,distinguishedName13
user5,distinguishedName12
user6,distinguishedName4
user2,distinguishedName2
user4,distinguishedName4
此顺序基于File2和File1记录顺序,如果要排序顺序,只需管道排序即可
awk ... | sort