2014-05-07 47 views
0

假设我在文件中有以下数据集的第一列,我想模拟第二列中的标志,所以我只导出绑定到标志= 1(数据集由目标列预先排序):模拟SAS的datastep语句FIRST使用Linux命令行工具

1 1 
1 0 
1 0 
2 1 
2 0 
2 0 

我可以运行awk 'NR==1 {print; next} seen[$1]++ {print}' dataset,但会遇到非常大的文件有问题(seen不断增加)。是否有替代方案来处理此问题而不跟踪目标列(此处为列#1)的每个唯一值?谢谢。

回答

1

所以你只有第一列?并想生成第二个?我认为一个稍微不同的awk命令可以工作

awk '{if (last==$1) {flag=0} else {last=$1; flag=1}; print $0,flag}' file.txt 

基本上你只检查第一场比赛,你见过的最后一个。由于它已排序,因此您不必跟踪所见过的所有内容,只需最后一次了解该值是否有所不同即可。

+0

简单,直接的解决方案,谢谢。我的数据有$ 1的错误,所以我不得不初始化为-1:'if(NR == 1){last = -1} ...' – user2105469

0

好像grep的将这个罚款:

$ grep " 1" dataset