打印记录中的第一个字段和(且仅)匹配字段,使用

2024-10-16 17:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我真的不知道awk是否适合这个任务。。。也许python中的一些东西会更好。不管怎样,我想先问一下任务的可行性。开始吧:

数据:

###

offspr84 175177 200172 312312312312326 338342 252240 226210113129223264
男性28 197175 172200 308312 310338 262338 256252 190226113129223219
女性13 197177 1721772312308 318326 342350 240248 210218 129113 267247

###

偏移量85181177192160 320312 290362358330238238 214178 133129263223
男性65 197181 176192 320268 32286358330238244 206214 137133 267263
女性17181177160172 280312 362346 350326 230238 126178 129129 223167

###

所以basical我需要打印第一个字段($1)并在第一个记录中匹配(粗体)9,在第二个记录中匹配$2和$6。在

输出文件:
偏移量PR84 113129
马来28 113129

偏移量PR85 181177
女性17 181177

偏移量85 358330
马来65 358330

有什么关于我如何做到这一点的提示吗?在

谢谢!在


Tags: 文件数据记录偏移量awk男性女性可行性
3条回答

试试这个awk代码

 awk '/###/{i++;next}
i==1{if($0~/offspr84/){
        a=$9;n=$1;next;
}

if($9==a){print n,a;print $1,$9}}
        i==2{if($0~/offspr85/){
        m=$1;p=$2;q=$6;next;}
        if($2==p){print m,p;print $1,p}
        if($6==q){print m,q;print $1,q}
}' yourFile

此代码将生成您想要的输出。也许不是最好的方法,但似乎能如期工作。在

#data = [
    #'offspr84 175177 200172 312312 310326 338342 252240 226210 113129 223264',
    #'male28 197175 172200 308312 310338 262338 256252 190226 113129 223219',
    #'female13 197177 172172 312308 318326 342350 240248 210218 129113 267247']

data = [
'offspr85 181177 192160 320312 290362 358330 238238 214178 133129 263223',
'male65 197181 176192 320268 322286 358330 238244 206214 137133 267263',
'female17 181177 160172 280312 362346 350326 230238 126178 129129 223167' ]

for i, line in enumerate(data):
    data[i] = line.split(' ')

for item in data[0]:
    if data[1].count(item) > 0:
        print data[0][0], item
        print data[1][0], item

    if data[2].count(item) > 0:
        print data[0][0], item
        print data[2][0], item

更新:

使用嵌套列表同时包含两个列表:

^{pr2}$

我不太确定你想要怎样匹配。但是假设相同的模式应用于所有字段,您可以通过在字段上循环来轻松地实现这一点,例如

{
    for(i=2; i<=NF; i++) {
        if (match($i, "some regexp")) {
            print $1 $i
        }
    }
}

相关问题 更多 >