2014-05-07 45 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