【发布时间】:2014-10-14 08:03:55
【问题描述】:
这里我有两个文件 data.txt 和 mrk.txt。
在第一行中,我想选择第二列中标有 2 的 id。第二行我只想保留以这些 id (3,5,8,9,10) 开头的行并删除其余行。有谁知道我该怎么做?
dam=$(awk '$2==2 {print $1}' data.txt)
./QmSim2uga.awk -v genotyped="$dam" mrk.txt > c_mark_001
QMSim2uga.awk 是
#!/bin/gawk -f
BEGIN{
nind=0
FIELDWIDTHS = "3 1 1 1 1 1"
}
($1 == dam){
nsnp=NF-1
genotype=""
for (i=1; i<=nsnp; i++){
out=$(i+1)
# QmSim -> UGA
# 0 -> AA -> 0
# 2 -> aa -> 2
# 3 -> Aa -> 1
# 4 -> aA -> 1
# (missing does not exist) -> 5
if(out>2) {out=1}
genotype=genotype out
}
if (NR % 10000 ==0){ printf("%s\n",NR) > "/dev/stderr" }
printf("%10s%1s%" nsnp "s\n",$1," ",genotype)
nind++
}
END{
printf("%s%10s%10s\n","nsnp, nanim",nsnp,NR) > "/dev/stderr"
}
数据.txt
1 1 2 1 3 2 4 1 5 2 6 1 7 1 8 2 9 2 10 2
mrk.txt
1 02340 2 20433 3 43220 4 32344 5 02233 6 30423 7 24430 8 00223 9 03342 10 34402
所需的输出将是,mrk.txt 文件第 2 列中的“3”和“4”应替换为 1
3 11220 5 02211 8 00221 9 01112 10 11102
但是现在给出的代码,输出文件是空的
【问题讨论】:
-
你当前和想要的输出是什么,你现在的代码有什么问题?
-
想要的输出是 3 43220(/n) 5 02333(/n) 等等,现在输出文件是空的。我不知道这里出了什么问题。
-
好的,我的问题已经回答了大约三分之一。
-
你有修改代码的想法吗?
标签: shell variables awk subset