【发布时间】:2017-08-05 03:14:03
【问题描述】:
在这里得到一些帮助后,我想到了(我希望通过尝试将多个脚本放在一起来学习)。下面的脚本将执行 HW 和 OW 替换,但不运行 if 语句。
*#*!/usr/bin/perl
use strict;
use warnings 'all';
$^I = '.bak'; # create a backup copy
while (<>) {
s/HW/HT/g; # do the replacement of HW with HT
s/OW/OT/g; # do a second replacement OW with OT
*#* Hopefully run the if statement
my @parts = /\s*\S+/g;
if ( $parts[1] =~ s/([HO])W/$1T/ ) {
$parts[5] = sprintf '%*d',
length $parts[5],
$parts[1] =~ /HT/ ? 2002 : 2001;
}
print @parts, "\n";
}
如果人们有类似的问题,我已经留下了下面的其余帖子。
我想使用 Perl 通过搜索字符串开头的特定字母来替换文件中的文本。例如这里是文件的一部分:
6 HT 4.092000 4.750000 -0.502000 0 5 7
7 HT 5.367000 5.548000 -0.325000 0 5 6
8 OT -5.470000 5.461000 1.463000 0 9 10
9 HT -5.167000 4.571000 1.284000 0 8 10
10 HT -4.726000 6.018000 1.235000 0 8 9
11 OT -4.865000 -5.029000 -3.915000 0 12 13
12 HT -4.758000 -4.129000 -3.608000 0 11 13
我想使用HT 作为搜索并且能够用2002 替换零列中的“0”。我知道如何替换整个零列,但我不知道如何使其特定于行。使用 HT 作为搜索后,我需要搜索 OT 并将 0 列替换为 2001。
基本上,我需要搜索一个标识该行的字符串并替换该行的特定字符串,而中间的文本是可变的。输出需要打印到 new_file.xyz。此外,我将在大量文件上重复执行此操作。 感谢您的帮助。
这是我正在使用的 python 代码,但无法弄清楚如何使“file.txt”成为接受命令后键入的文件的变量。此代码要求我每次使用时都将“file.txt”更改为文件名。我也无法将其打印到新文件中。
python 代码:
#!/usr/bin/python
with open('file.txt') as f:
lines = f.readlines()
new_lines = []
for line in lines:
if "HT" in line:
new_line = line.replace(' 0 ', '2002')
new_lines.append(new_line)
else:
new_lines.append(line)
content = ''.join(new_lines)
print(content)
我已经能够在 Perl 中完成一些工作,并希望有一个脚本可以按顺序执行所有替换步骤,因为所有 HT 都以 HW 开头,所有OT 以 OW 开头。
Perl 脚本:
#!/usr/bin/perl
use strict;
use warnings;
$^I = '.bak'; # create a backup copy
while (<>) {
s/HW/HT/g; # do the replacement
s/OW/OT/g; # do a second replacement
print; # print to the modified file
}
感谢您的帮助。
哦,不幸的是,我仅限于 Python 2.7,因为有人建议使用 Python 3.0 的代码。我纯粹是大学集群的用户,但会询问升级python。
【问题讨论】:
-
你试过什么?你在 Python 中想出了什么不起作用的东西?请向我们展示您的代码并解释哪些部分不起作用。
-
我也希望使用 PERL,因为我已经想出了如何用 HT 替换 HW,用 OT 替换 OW,我希望能够将所有内容组合到一个 PERL 脚本中运行任何输入文件。
-
如果你已经有了,请出示。你可以edit你的问题。现在的情况,社区将关闭它,因为看起来你希望我们为你做你的工作。我们不喜欢这里。
-
PYTHON 的主要问题是我不知道如何接受人们的建议并让他们打印到一个新文件中,我不知道如何制作“file.txt”变量是与命令相邻键入的文件。这是我在 Python 中所做的:#!/usr/bin/python with open('file.txt') as f:lines = f.readlines() new_lines = [] for line in lines: if "HT" in line : new_line = line.replace('0', '2002') new_lines.append(new_line) else: new_lines.append(line) content = ''.join(new_lines) print(content)
-
以下是我在 PERL 中可以做的事情,我承认这很容易,但花了我很多时间。 #!/usr/bin/perl 使用严格;使用警告; $^I = '.bak'; # 创建一个备份副本 while () { s/HW/HT/g; # 替换 s/OW/OT/g; # 进行第二次替换打印; # 打印到修改后的文件 }