我有这个巨大的表,有大约200k行和列(制表符分隔)。我想根据此特定列$ 4的值来选择它们,因此它们的值间隔至少为100,但也要考虑第3列的值。即
id tag xxx position score
id_1 aaaaaaa bbbbb 3190 1
id_2 aaaaaaa bbbbb 3199 1
id_3 aaaaaaa bbbbb 3300 1
id_4 aaaaaaa bbbbb 3350 1
id_5 aaaaaaa ccccc 100 1
id_6 aaaaaaa ccccc 500 1
id_7 aaaaaaa ccccc 550 1
id_8 aaaaaaa ccccc 599 1
得到这样的东西:
id tag block position score
id_1 aaaaaaa bbbbb 3190 1
id_3 aaaaaaa bbbbb 3300 1
id_5 aaaaaaa ccccc 100 1
id_6 aaaaaaa ccccc 500 1
前段时间@hek2mgl使用此代码根据值之间的距离过滤了一个巨大的表
awk 'NR<3; NR==2{pv=$4} NR>2 && ($4-pv>=100){print;pv=$4}' file
然而,这段代码并没有考虑现在我需要考虑的$ 3,以避免为每个块创建一个新文件..这可能是可能的,因为考虑到$ 4中的值不连续,它有点复杂如果他们不代表同一块($ 3)?
由于
答案 0 :(得分:1)
awk
救援!
只需用$ 3来限定以前的值。
$ awk 'NR<3; NR==2{pv[$3]=$4} NR>2 && ($4-pv[$3]>=100){print;pv[$3]=$4}' file
id tag xxx position score
id_1 aaaaaaa bbbbb 3190 1
id_3 aaaaaaa bbbbb 3300 1
id_5 aaaaaaa ccccc 100 1
id_6 aaaaaaa ccccc 500 1
即。将pv
更改为pv[$3]
。您可以将输出传递给column -t
以获得更好的格式,或将print更改为printf。
答案 1 :(得分:0)
如果你想要一个固定的列大小,为什么不是一个简单的printf?
NSString *loadData = [[NSBundle mainBundle]pathForResource:@"Dinosaurs" ofType:@"plist"];
NSDictionary *dinoDictionary = [[NSDictionary alloc] initWithContentsOfFile: loadData];
NSString *DINOIMAGE = (NSString *)dinoDictionary[@"DINOIMAGE"];
NSLog(@"%@, %@", dinoDictionary, DINOIMAGE);
spc=10;
while read a b c d e; do
printf '%-'$spc's %-'$spc's %-'$spc's %-'$spc's %-'$spc's\n' $a $b $c $d $e;
done < file
定义列之间的空格数
输出:
spc