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