utils/filter_scp.pl脚本功能分析

utils/filter_scp.pl

脚本的功能

首先看一这个脚本的输入输出文件:

 Usage: filter_scp.pl [--exclude] [-f] id_list [in.scp] > out.scp

id_list:指的是话语ID的列表

G0001T0001G0001S01010002
G0001T0001G0001S01010003
G0001T0001G0001S01010004
G0001T0001G0001S01010005

in.scp:指的是每一句话对应在ark中的位置。

G0001T0001G0001S01010002 tmp.ark:25
G0001T0001G0001S01010003 tmp.ark:4908
G0001T0001G0001S01010004 tmp.ark:7199
G0001T0001G0001S01010005 tmp.ark:11086
G0001T0001G0001S01010006 tmp.ark:14941
G0001T0001G0001S01010009 tmp.ark:18876
G0001T0001G0001S01010010 tmp.ark:25251
G0001T0001G0001S01010011 tmp.ark:28094
G0001T0001G0001S01010012 tmp.ark:33213
G0001T0001G0001S01010013 tmp.ark:38848
G0001T0001G0001S01010014 tmp.ark:42107
G0001T0001G0001S01010015 tmp.ark:46122
G0001T0001G0001S01010016 tmp.ark:49329
G0001T0001G0001S01010017 tmp.ark:53900
G0001T0001G0001S01010018 tmp.ark:59227
G0001T0001G0001S01010019 tmp.ark:62578
G0001T0001G0001S01010020 tmp.ark:65433
G0001T0001G0001S01010021 tmp.ark:68192
G0001T0001G0001S01010022 tmp.ark:71963
G0001T0001G0001S01010023 tmp.ark:74606
G0001T0001G0001S01010024 tmp.ark:79513
G0001T0001G0001S01010025 tmp.ark:84296
G0001T0001G0001S01010027 tmp.ark:86863
G0001T0001G0001S01010028 tmp.ark:89402
G0001T0001G0001S01010030 tmp.ark:92981
G0001T0001G0001S01010031 tmp.ark:95708
G0001T0001G0001S01010033 tmp.ark:99903
G0001T0001G0001S01010034 tmp.ark:104138
G0001T0001G0001S01010035 tmp.ark:108285
G0001T0001G0001S01010038 tmp.ark:111776

现在我们的脚本的功能是,检索in.scp中每行第一列的话语id,判断这个id是否在id_list中,如果在的话就输出这一行。根据以上两个文件,我们进行测试:

./utils/filter_scp.pl  id_list in.scp

输出如下,可以看到只有id_list中四个话语id所对应的行被输出了。

G0001T0001G0001S01010002 tmp.ark:25
G0001T0001G0001S01010003 tmp.ark:4908
G0001T0001G0001S01010004 tmp.ark:7199
G0001T0001G0001S01010005 tmp.ark:11086

接下解释下两个参数:
[–exclude]指的是检索in.scp中的话语id,将没有出现在id_list中的行输出,和之前的测试正好相反:

 ./utils/filter_scp.pl --exclude  id_list in.scp

输出结果如下,我们看到输出的行的第一列话语id都是id_list中没有出现过得:

G0001T0001G0001S01010006 tmp.ark:14941
G0001T0001G0001S01010009 tmp.ark:18876
G0001T0001G0001S01010010 tmp.ark:25251
G0001T0001G0001S01010011 tmp.ark:28094
G0001T0001G0001S01010012 tmp.ark:33213
G0001T0001G0001S01010013 tmp.ark:38848
G0001T0001G0001S01010014 tmp.ark:42107
G0001T0001G0001S01010015 tmp.ark:46122
G0001T0001G0001S01010016 tmp.ark:49329
G0001T0001G0001S01010017 tmp.ark:53900
G0001T0001G0001S01010018 tmp.ark:59227
G0001T0001G0001S01010019 tmp.ark:62578
G0001T0001G0001S01010020 tmp.ark:65433
G0001T0001G0001S01010021 tmp.ark:68192
G0001T0001G0001S01010022 tmp.ark:71963
G0001T0001G0001S01010023 tmp.ark:74606
G0001T0001G0001S01010024 tmp.ark:79513
G0001T0001G0001S01010025 tmp.ark:84296
G0001T0001G0001S01010027 tmp.ark:86863
G0001T0001G0001S01010028 tmp.ark:89402
G0001T0001G0001S01010030 tmp.ark:92981
G0001T0001G0001S01010031 tmp.ark:95708
G0001T0001G0001S01010033 tmp.ark:99903
G0001T0001G0001S01010034 tmp.ark:104138
G0001T0001G0001S01010035 tmp.ark:108285
G0001T0001G0001S01010038 tmp.ark:111776

[–f]这个参数默认是1。他指的我们in.scp中第几列是话语id,他并不能智能的判断你的in.scp中哪列是话语id,需要我们自己去设定,因为这个in.scp正好第一列是话语id,所以我们并不需要去进行设置,如果出现在第二列,那么我们就需要就 -f 2。举个例子,我们将in.scp的前两列交换:

awk '{print $2,$1}' <in.scp >in_new.scp
cat in_new.scp

我们可以看一下in_new.scp文件:

tmp.ark:25 G0001T0001G0001S01010002
tmp.ark:4908 G0001T0001G0001S01010003
tmp.ark:7199 G0001T0001G0001S01010004
tmp.ark:11086 G0001T0001G0001S01010005
tmp.ark:14941 G0001T0001G0001S01010006
tmp.ark:18876 G0001T0001G0001S01010009
tmp.ark:25251 G0001T0001G0001S01010010
tmp.ark:28094 G0001T0001G0001S01010011
tmp.ark:33213 G0001T0001G0001S01010012
tmp.ark:38848 G0001T0001G0001S01010013
tmp.ark:42107 G0001T0001G0001S01010014
tmp.ark:46122 G0001T0001G0001S01010015
tmp.ark:49329 G0001T0001G0001S01010016
tmp.ark:53900 G0001T0001G0001S01010017
tmp.ark:59227 G0001T0001G0001S01010018
tmp.ark:62578 G0001T0001G0001S01010019
tmp.ark:65433 G0001T0001G0001S01010020
tmp.ark:68192 G0001T0001G0001S01010021
tmp.ark:71963 G0001T0001G0001S01010022
tmp.ark:74606 G0001T0001G0001S01010023
tmp.ark:79513 G0001T0001G0001S01010024
tmp.ark:84296 G0001T0001G0001S01010025
tmp.ark:86863 G0001T0001G0001S01010027
tmp.ark:89402 G0001T0001G0001S01010028
tmp.ark:92981 G0001T0001G0001S01010030
tmp.ark:95708 G0001T0001G0001S01010031
tmp.ark:99903 G0001T0001G0001S01010033
tmp.ark:104138 G0001T0001G0001S01010034
tmp.ark:108285 G0001T0001G0001S01010035
tmp.ark:111776 G0001T0001G0001S01010038

这个时候如果去检索id_list内的话语的id的话,-f参数就要设置为2.

./utils/filter_scp.pl -f 2 id_list in_new.scp
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值