需求:
有兩個文件要销,文件 A 是英文,文件 B 是中文夏块;B 是 A 的翻譯疏咐。
但是 A 中有很多是重復(fù)的。所以要將 A 中重復(fù)的行刪除脐供,并刪除 B 中對應(yīng)的行浑塞。同時保留第一個。
比如
image.png
將 A 里面除了第一句
找不到翻譯結(jié)果
以外重復(fù)的刪除政己,并刪除 B 中對應(yīng)的位置3 5 7 9
酌壕。嘗試過簡單粗暴的去重,但是效果并不理想。
awk '!seen[$0]++' merge_all.txt > output.txt
于是自己學(xué)了一下 awk 的語法卵牍,然后寫了個腳本:
# awk -f del.awk file1 file2 > result.txt
# wc -l result.txt
# n = result的行數(shù)除以2
# split -l 行數(shù) 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
手動按行數(shù)從中間切割。
這個方法的優(yōu)點(diǎn)是非常非常非呈臀快萝衩。比寫 python 快了好多好多倍。
多學(xué)點(diǎn) linux 命令船侧,在做數(shù)據(jù)處理的時候欠气,還是挺好用的。