我有格式为
的文本文件 1 5.287 15.026 0.623 1 U 1.805E+05 0.000E+00 e 0 666 761 769
2 4.601 15.023 0.623 4 U 6.220E+04 0.000E+00 e 0 0 0 0
3 2.883 15.059 0.623 3 U 3.303E+05 0.000E+00 e 0 680 761 769
4 0.623 56.340 5.287 3 U 9.990E+04 0.000E+00 e 0 769 590 666
...
我想识别第11列与第13列匹配的行,第13列与任何其他行(例如第1行和第4行)的第11列匹配。我希望在两行末尾添加注释并打印整个文件。
1 5.287 15.026 0.623 1 U 1.805E+05 0.000E+00 e 0 666 761 769 #Line 4
2 4.601 15.023 0.623 4 U 6.220E+04 0.000E+00 e 0 0 0 0
3 2.883 15.059 0.623 3 U 3.303E+05 0.000E+00 e 0 680 761 769
4 0.623 56.340 5.287 3 U 9.990E+04 0.000E+00 e 0 769 590 666 #Line 1
这是NMR光谱数据。非常感谢您的帮助。 谢谢 -mandar
答案 0 :(得分:1)
这样的事情可能有用:
use warnings;
use strict;
my %col11_13;
# read file
my @lines = map { chomp; [ split, $_] } <>;
# prepare hash in the first pass
for my $i (0..@lines - 1) {
push (@{$col11_13{$lines[$i][10]."|".$lines[$i][12]}}, $i + 1);
}
# output in the second...
for my $i (0..@lines - 1) {
# get the list of matching records, but filter out a self match
my @s = grep { $_ != $i + 1 } @{$col11_13{$lines[$i][12]."|".$lines[$i][10]}};
if (@s) {
print $lines[$i][13], "# Line ", join(" ", @s) ,"\n";
} else {
print $lines[$i][13], "\n";
}
}