首先使用 linux 命令行工具模拟 SAS 的数据步骤语句



假设我在一个文件中有以下数据集的第一列,我想模拟第二列中的标志,所以我只导出与标志= 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

最新更新