订购一列,然后在命令行中用awk打印某一行

订购一列,然后在命令行中用awk打印某一行,awk,command,Awk,Command,我有这样一个txt文件: ID row1 row2 row3 score rs16 ... ... ... 0.23 rs52 ... ... ... 1.43 rs87 ... ... ... 0.45 rs89 ... ... ... 2.34 rs67 ... ... ... 1.89 sort -k5gr <(tail -n+2 infile) | head -n80KB

我有这样一个txt文件:

ID   row1   row2   row3   score
rs16 ...    ...    ...    0.23
rs52 ...    ...    ...    1.43
rs87 ...    ...    ...    0.45
rs89 ...    ...    ...    2.34
rs67 ...    ...    ...    1.89
sort -k5gr <(tail -n+2 infile) | head -n80KB
tr -s ' ' < infile | cut -d' ' -f1,5 > outfile
awk -f parse.awk OFS='\t' ratio_to_keep=.01 infile
第1行-第3行无关紧要


我有大约800万行,分数在0-3之间。我想知道与排名前1%相关的分数。我在考虑按分数重新排序数据,然后打印~80000行?你们认为这方面最好的代码是什么?

使用GNU coreutils,您可以这样做:

ID   row1   row2   row3   score
rs16 ...    ...    ...    0.23
rs52 ...    ...    ...    1.43
rs87 ...    ...    ...    0.45
rs89 ...    ...    ...    2.34
rs67 ...    ...    ...    1.89
sort -k5gr <(tail -n+2 infile) | head -n80KB
tr -s ' ' < infile | cut -d' ' -f1,5 > outfile
awk -f parse.awk OFS='\t' ratio_to_keep=.01 infile
排序-k5gr输出文件
或综合起来:

sort -k5gr <(tail -n+2 <(tr -s ' ' < infile | cut -d' ' -f1,5)) | head -n80KB

sort-k5gr使用GNU awk,您可以通过将
PROCINFO[“sorted_in”]
设置为
“@val_num_desc”
对值进行排序。例如:

ID   row1   row2   row3   score
rs16 ...    ...    ...    0.23
rs52 ...    ...    ...    1.43
rs87 ...    ...    ...    0.45
rs89 ...    ...    ...    2.34
rs67 ...    ...    ...    1.89
sort -k5gr <(tail -n+2 infile) | head -n80KB
tr -s ' ' < infile | cut -d' ' -f1,5 > outfile
awk -f parse.awk OFS='\t' ratio_to_keep=.01 infile
解析.awk

#设置排序方法
开始{PROCINFO[“sorted_in”]=“@val_num_desc”}
#打印页眉
NR==1{打印$1,$5}
#将第1列和第5列分别保存为g和h散列
NR>1{g[NR]=$1;h[NR]=$5}
#打印g和h的值,直到达到比率
结束{
对于(k in h){
如果(i++>=int(0.5+NR*比值)
出口
打印g[k],h[k]
}
}
按如下方式运行:

ID   row1   row2   row3   score
rs16 ...    ...    ...    0.23
rs52 ...    ...    ...    1.43
rs87 ...    ...    ...    0.45
rs89 ...    ...    ...    2.34
rs67 ...    ...    ...    1.89
sort -k5gr <(tail -n+2 infile) | head -n80KB
tr -s ' ' < infile | cut -d' ' -f1,5 > outfile
awk -f parse.awk OFS='\t' ratio_to_keep=.01 infile

sort-k5nr(infle)>sort.infle
,然后使用
sed-80000p(sort.infle)
行吗?@Evan:当然可以,但文件名周围没有括号。