需求:
有两个文件,文件 A 是英文,文件 B 是中文;B 是 A 的翻译。
但是 A 中有很多是重复的。所以要将 A 中重复的行删除,并删除 B 中对应的行。同时保留第一个。
比如
将 A 里面除了第一句
找不到翻译结果
以外重复的删除,并删除 B 中对应的位置3 5 7 9
。尝试过简单粗暴的去重,但是效果并不理想。
awk '!seen[$0]++' merge_all.txt > output.txt
于是自己学了一下 awk 的语法,然后写了个脚本:
# awk -f del.awk file1 file2 > result.txt
# wc -l result.txt
# n = result的行数除以2
# split -l 行数 result.txt
## 使用 cat 可以合并文件、使用 rename 可以批量重命名
{
if (NR==FNR) {
if(!a[$0]) {
a[$0]++
print
} else {
b[FNR]=1
}
} else {
if (!b[FNR]) {
print
}
}
}
跑完这个命令之后,会把 file1、file2 合并到 result.txt 里面,所以需要用 split
手动按行数从中间切割。
这个方法的优点是非常非常非常快。比写 python 快了好多好多倍。
多学点 linux 命令,在做数据处理的时候,还是挺好用的。
网友评论