【发布时间】:2015-10-20 08:11:03
【问题描述】:
您好,我有一个需要解析的文本文件
libA/cellA/view1/data.dm#1 - edit default
libA/cellA/view1/master.tag#1 - edit defau
libA/cellA/view1/sch.oa#1 - edit default c
libA/cellA/view1/thumbnail_128x128.png#1 -
libA/cellB/view1/data.dm#1 - edit default
libA/cellB/view1/master.tag#1 - edit defau
libA/cellB/view1/sch.oa#1 - edit default c
libA/cellB/view1/thumbnail_128x128.png#1 -
libA/cellB/symbol/master.tag#1 - edit defa
libA/cellB/symbol/symbol.oa#1 - edit defau
libA/cellB/symbol/thumbnail_128x128.png#1
libA/cellC/view1/data.dm#1 - edit default
libA/cellC/view1/master.tag#1 - edit defau
libA/cellC/view1/sch.oa#1 - edit default c
libA/cellC/view1/thumbnail_128x128.png#1 -
libA/cellD/veriloga/data.dm#1 - edit defau
libA/cellD/veriloga/master.tag#1 - edit de
libA/cellD/veriloga/netlist.oa#1 - edit de
libA/cellD/veriloga/veriloga.va#1 - edit d
libA/cellE/view1/data.dm#1 - edit default
libA/cellE/view1/master.tag#1 - edit defau
Step1:在上面的文本文件中,我只想保留文本,直到第三次出现“/”字符。例如输出应该如下:
libA/cellA/view1
libA/cellA/view1
libA/cellA/view1
libA/cellA/view1
libA/cellB/view1
libA/cellB/view1
libA/cellB/view1
libA/cellB/view1
libA/cellB/view2
libA/cellB/view2
libA/cellB/view2
libA/cellC/view1
libA/cellC/view1
libA/cellC/view1
libA/cellC/view1
libA/cellD/view3
libA/cellD/view3
libA/cellD/view3
libA/cellD/view3
libA/cellE/view1
libA/cellE/view1
Setp2:那我想删除重复的行,中间保留空行:
libA/cellA/view1
libA/cellB/view1
libA/cellB/view2
libA/cellC/view1
libA/cellD/view3
libA/cellE/view1
关于如何在 Perl 中执行此操作的任何指针? 我正在尝试这样的事情:
#!/usr/bin/perl
# File: parse.pl
unless (open(MYFILE, "sample.txt"))
{
die ("cannot open input file file1\n");
}
unless (open(OUTFILE, ">outfile.txt"))
{
die ("cannot open output file outfile\n");
}
# if the program gets this far, the file was
# opened successfully
$line = <MYFILE>;
while ($line ne "")
{
#print ($line);
my ($lib, $cell, $view) = split /:/, $line;
#print "$lib\n";
#print "$cell\n";
#print "$view\n";
print OUTFILE ($lib/$cell/$view/n);
$line = <MYFILE>;
}
【问题讨论】:
-
你想要
split和一个哈希,而不是一个正则表达式。到目前为止,您尝试过什么? -
我不能使用正则表达式并且在出现第三个“/”字符后什么都不替换吗?
-
你可以,但你不应该。这不仅仅是
/——它也是你想要保留的斜线之间的所有东西。另外,您的示例输出是否正确?libA/cellC/view1似乎仍有重复的行。 -
既然你用你迄今为止尝试过的内容更新了你的帖子(我猜......但是一个格式错误的正则表达式匹配并不会真正做任何事情),我会指出你可能还需要一些代码来逐行处理您的输入文件并根据您的发现做出一些决定。
-
对不起,我更新了帖子以更正示例输出。感谢您的帮助