需要perl one-liner在文本文件的特定列中拆分字符串

时间:2016-12-15 18:15:21

标签: regex perl

我有以下制表符分隔文件

AGREE   FIND_008903.FIND_008907.FIND_008903.FIND_008904 0.5026 0.2524
AGREE   FIND_000499.FIND_000503.FIND_000499.FIND_000502 0.5699 0.2790
AGREE   FIND_004339.FIND_004342.FIND_004339.FIND_004341 0.5307 0.2562
AGREE   FIND_008097.FIND_008100.FIND_008097.FIND_008098 0.5000 0.2456

我需要一个perl单行代替第二个句点,以便结果

AGREE   FIND_008903.FIND_008907   FIND_008903.FIND_008904 0.5026 0.2524
AGREE   FIND_000499.FIND_000503   FIND_000499.FIND_000502 0.5699 0.2790
AGREE   FIND_004339.FIND_004342   FIND_004339.FIND_004341 0.5307 0.2562
AGREE   FIND_008097.FIND_008100   FIND_008097.FIND_008098 0.5000 0.2456

我试过这个,但它取代了所有时期。

> perl -pe 'tr/(\w+\.\w+)\.(\w+\.\w+)/$1\t$2/s' /share/nas04/bioinformatics_group/data/studies/phenx/FIND/Stephen/Processed/king/FIND_AA.ld_pruned.ibd_king_comparison


AGREE   FIND_008903$FIND_008907$FIND_008903$FIND_008904 0$5026 0$2524
AGREE   FIND_000499$FIND_000503$FIND_000499$FIND_000502 0$5699 0$2790
AGREE   FIND_004339$FIND_004342$FIND_004339$FIND_004341 0$5307 0$2562
AGREE   FIND_008097$FIND_008100$FIND_008097$FIND_008098 0$5000 0$2456

我感谢任何指导。

1 个答案:

答案 0 :(得分:3)

没有必要这么复杂。这将按你的要求进行

perl -pe 's/\.[^.]*\K\./\t/' myfile

输出

AGREE   FIND_008903.FIND_008907 FIND_008903.FIND_008904 0.5026 0.2524
AGREE   FIND_000499.FIND_000503 FIND_000499.FIND_000502 0.5699 0.2790
AGREE   FIND_004339.FIND_004342 FIND_004339.FIND_004341 0.5307 0.2562
AGREE   FIND_008097.FIND_008100 FIND_008097.FIND_008098 0.5000 0.2456