订购一列,然后在命令行中用awk打印某一行
我有这样一个txt文件:订购一列,然后在命令行中用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
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:当然可以,但文件名周围没有括号。