Command line 模拟SAS';首先使用linux命令行工具执行datastep语句

Command line 模拟SAS';首先使用linux命令行工具执行datastep语句,command-line,Command Line,假设我在一个文件中有以下数据集的第一列,我想模拟第二列中的标志,因此我只导出与标志=1关联的行(数据集按目标列预先排序): 我可以运行awk'NR==1{print;next}seen[$1]+{print}数据集,但是对于非常大的文件会遇到问题(seen不断增长)。是否有其他方法可以在不跟踪目标列(此处为列#1)的每个唯一值的情况下处理此问题?谢谢。看起来格雷普可以这样做: $ grep " 1" dataset 所以你只有第一列?是否要生成第二个?我认为稍微不同的awk命令可以工作 awk

假设我在一个文件中有以下数据集的第一列,我想模拟第二列中的标志,因此我只导出与标志=1关联的行(数据集按目标列预先排序):


我可以运行
awk'NR==1{print;next}seen[$1]+{print}数据集
,但是对于非常大的文件会遇到问题(
seen
不断增长)。是否有其他方法可以在不跟踪目标列(此处为列#1)的每个唯一值的情况下处理此问题?谢谢。

看起来格雷普可以这样做:

$ grep " 1" dataset

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

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

基本上,您只需检查第一个字段是否与您看到的最后一个字段匹配。由于已排序,您不必跟踪所看到的所有内容,只需最后一个即可知道值是否不同。

简单、快速的解决方案,谢谢。我的数据在$1中丢失,因此我必须将last初始化为-1:
if(NR==1){last=-1}…
awk '{if (last==$1) {flag=0} else {last=$1; flag=1}; print $0,flag}' file.txt