首页 > 解决方案 > 使用perl删除特定位置的列

问题描述

我是 Perl 的新手,我正在尝试删除在特定位置定义的列。我的文件如下所示:

https://i.stack.imgur.com/18l5a.png

知道列的编号如下:

1-3 , 5-7 , 9-12 , 14-16 , 18-21 , 23-25 , 27-29 , 31-37 , 39-68 , 70-72 , 74

我想删除从以下位置开始的列:

1-3 , 14-16 , 23-25 , 27-29 , 31-37 , 39-68 , 70-72 , 74

这样我就可以得到这个,只有列:5-7 和 9-12,但将它们的位置更改为:1-5 和 7-10

我还想在特定位置添加新列,例如 (12-21) 并获得以下结果文件:

https://i.stack.imgur.com/eQ0Yp.png

先感谢您!

标签: perlparsingtext-files

解决方案


一种方法是使用unpack. 试试这个perl p.pl < in.txt,在哪里p.pl

while (<>) {
    my @cols = unpack "A3xA3xA4xA*", $_;
    CORE::say join ' ', $cols[2] . '  ', $cols[1], "      same";
}

更新

根据评论中的讨论,以下解决方案解决了该问题:

while (<>) {
    my @cols = unpack "A3xA3xA4xA*", $_;
    printf "%-5s %-5s %-4s\n", $cols[1], $cols[2], "same";
}

推荐阅读