我有一个如下的文本文件;
ALIC00AUS_R_20183350000.gz -4052052.7 4212835.9 -2545104.6
ALIC00AUS_R_20183350000.gz -4052052.7 4212836.0 -2545104.6
ALIC00AUS_R_20183350000.gz -4052052.7 4212836.0 -2545104.6
ALIC00AUS_R_20183350000.gz -4052052.7 4212835.9 -2545104.6
ALIC00AUS_R_20183350000.gz -4052052.5 4212836.0 -2545104.6
ALIC00AUS_R_20183350000.gz -4052052.6 4212835.9 -2545104.6
CPVG00CPV_R_20183460000.gz 5626883.4 -2380932.3 1824483.9
CPVG00CPV_R_20183460000.gz 5626883.4 -2380932.3 1824483.9
CPVG00CPV_R_20183460000.gz 5626883.3 -2380932.2 1824483.1
在这个文件中,ALIC00AUS_R_20183350000.gz
分别CPVG00CPV_R_20183460000.gz
重复六次和三次。我需要删除第 1 列中每个字符串的最后重复行,输出应如下所示;
ALIC00AUS_R_20183350000.gz -4052052.7 4212835.9 -2545104.6
ALIC00AUS_R_20183350000.gz -4052052.7 4212836.0 -2545104.6
ALIC00AUS_R_20183350000.gz -4052052.7 4212836.0 -2545104.6
ALIC00AUS_R_20183350000.gz -4052052.7 4212835.9 -2545104.6
ALIC00AUS_R_20183350000.gz -4052052.5 4212836.0 -2545104.6
CPVG00CPV_R_20183460000.gz 5626883.4 -2380932.3 1824483.9
CPVG00CPV_R_20183460000.gz 5626883.4 -2380932.3 1824483.9
如果您确定每个
$1
(第一列)至少重复一次,那么您可以:$1
以前见过的行前任。
如果您可以满足@steeldriver 提供的答案中的保证,那是更好的解决方案,如果不使用此脚本。
awk 是做这种替换的首选程序。
要删除在第一列中有重复的行,应该这样做。
awk '!seen[$1]++' filename > outputfile
如果您需要删除完全重复的行,请改用它。
awk '!seen[$0]++' filename > outputfile
如本答案所示:https ://unix.stackexchange.com/questions/171091/remove-lines-based-on-duplicates-within-one-column-without-sort
这是一个简短的解释。awk 用于模式扫描和文本处理。首先,它检查第 1 列 ($1) 中的值是否在所看到的地图中。如果不是,它会将该行打印到输出文件,或者如果您不重定向(> 输出文件)则显示屏幕。下一部分是将已查看的列信息添加到已查看 (++) 中,以便可以使用下一个模式进行搜索。