我需要合并我拥有的两个文件,但在合并它们之前我首先需要它匹配。这是我的第一个文件,其中包含 100 万行。
abcde
fghi
jklmn
opqrs
123456
0000
第二个文件包含 300 万行,但仍有一些行包含第一个文件中的字符串。
543123:fdfdss
dfskld:533fg
abcde:1234
fdskls:fkdfs
gfdkls:flfds
0000:5432
fdsk:saakl
输出:
abcde:1234
fghi
jklmn
opqrs
123456
0000:5432
我希望输出为 file1:file2,但前提是它与 file2 的第一列和 file1 中的字符串匹配。我不想打乱排序格式,我希望它按这个顺序排列,并且我想保留 file1 字符串,但只添加匹配的字符串。
答案1
简单的方法是通过awk
- 只需读取第二个文件,将每一行保存到数组中(其中索引为 $1),并在读取第一个文件时检查该行是否已经是数组中的索引 - 如果是,则替换为该元素的值:
awk -F: 'NR==FNR{z[$1]=$0;next}
($0 in z) {$0=z[$1]};1' file2 file1
您也可以执行此操作,join
但需要更多工作(基本上,对第一个文件中的行进行编号,以便能够对结果进行排序join
并恢复顺序):
join -a 1 -t: -1 2 -2 1 <(nl -s: -ba -nrz file1 | sort -t: -k2,2) \
<(sort -t: -k1,1 file2) | sort -t: -k2,2 | cut -d: -f1,3-