aq.txt
我有一个包含以下内容的文件:
WP_021815421.1 OG5_132922 deth|YP_182312 3 -07 42.35 81.7
WP_021815427.1 OG5_128110 rbal|NP_868155 1 -55 50.72 53.2
WP_012456834.1 NO_GROUP bsui|NP_700181 8 -53 48.18 62
WP_084606289.1 OG5_132922 aful|NP_069703 5 -28 57.00 92.6
WP_084606284.1 OG5_153487 bpse|YP_331974.1 6 -78 48.87 91.4
另一个文件ar.txt
包含以下内容:
WP_007394757.1 OG5_129150 cbur|NP_820894 7 -12 84.09 100
WP_010195908.1 OG5_130915 yent|YP_001007837.1 6 -16 70.42 100
WP_011281115.1 OG5_128110 rbal|NP_868155 1 -56 51.67 52.3
WP_010196670.1 OG5_126760 yent|YP_001008069.1 7 -46 85.44 100
WP_010196689.1 OG5_128312 sent|NP_458465 8 -36 68.81 100
WP_010196702.1 OG5_126678 sfle|NP_709098 7 -52 81.30 100
WP_011281110.1 OG5_132922 deth|YP_182312 1 -07 38.82 81.7
WP_011281234.1 NO_GROUP bsui|NP_700181 8 -53 48.18 62
WP_011281111.1 OG5_132922 aful|NP_069703 5 -28 55.88 94.4
WP_010196711.1 OG5_126722 sent|NP_458477 2 -53 73.29 96.4
WP_010196728.1 OG5_126681 bpse|YP_335116.1 1 -42 80.36 86.8
我想只提取匹配的模式(基于OG number
),所以我编写了以下脚本:
OG5_132922 aq WP_021815421.1
OG5_132922 ar WP_011281110.1
OG5_132922 ar WP_011281111.1
OG5_128110 aq WP_021815427.1
OG5_128110 ar WP_011281115.1
OG5_132922 aq WP_021815421.1
OG5_132922 ar WP_011281110.1
OG5_153487 aq WP_084606284.1
我的意思是如果它找到 OG 号码两次或更多次,那么只应打印第一个匹配的号码。有人可以指导我吗?
答案1
问题:
- 打印第二个字段,即不带扩展名的文件名,然后打印第一个字段。
- 使用 TAB 分隔输出字段。
- 省略包含 的行
NO_GROUP
。 - 在输出文件中,第一个和第二个字段的组合必须是唯一的(它们构成一个唯一键):任何具有相同键的进一步记录都将被丢弃。
解决方案:
awk 'FNR == 1 {delete a} !/NO_GROUP/ && !($2 in a) {print $2"\t"gensub(/\..*$/, "", 1, FILENAME)"\t"$1; a[$2]++;}' *.txt
试运行结果:
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_128110 psychrobacter_aquaticus WP_021815427.1
OG5_153487 psychrobacter_aquaticus WP_084606284.1
OG5_129150 psychrobacter_arcticus WP_007394757.1
OG5_130915 psychrobacter_arcticus WP_010195908.1
OG5_128110 psychrobacter_arcticus WP_011281115.1
OG5_126760 psychrobacter_arcticus WP_010196670.1
OG5_128312 psychrobacter_arcticus WP_010196689.1
OG5_126678 psychrobacter_arcticus WP_010196702.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_126722 psychrobacter_arcticus WP_010196711.1
OG5_126681 psychrobacter_arcticus WP_010196728.1
排序:
如果您想对结果进行排序,只需根据所需的输出将它们通过管道传输到sort
或。sort -k2,2