假设我在一个文件中有以下数据集的第一列,我想模拟第二列中的标志,所以我只导出与标志= 1绑定的行(数据集由目标列预先排序):
1 1
1 0
1 0
2 1
2 0
2 0
我可以运行awk 'NR==1 {print; next} seen[$1]++ {print}' dataset
,但是对于非常大的文件(seen
不断增长)会遇到问题。是否有一种替代方法可以在不跟踪目标列(这里是列#1)的每个唯一值的情况下处理这个问题?谢谢。
所以你只有第一列?想要生成第二个吗?我认为一个稍微不同的awk命令可以工作
awk '{if (last==$1) {flag=0} else {last=$1; flag=1}; print $0,flag}' file.txt
基本上你只是检查第一个字段是否与你看到的最后一个匹配。因为它是排序的,你不需要跟踪你看到的所有东西,只需要知道最后一个值是否不同。
似乎grep会很好:
$ grep " 1" dataset