0

F1.txt

tom1 a1 b1 c1
bob2 d2 e2 f2

结果

F2.txt

a1 b1 c1 tom1
d2 e2 f2 bob2

大家好,有谁能帮我解决这个问题。我的工作是将文件中每一行的第一个单词移到给定文件该行的最后一个位置。如F2.txt所示。这是我尝试过的代码,但没有得到所需的输出。

use strict;
use warnings;

open FILE1, "<final.l";
open FILE2, ">>finala11.l";

my($line, @line);
while (<FILE1>) {
  $line=$_;
  chomp($line);
  @line = split("\t"," ",$line);

  push(@line, shift(@line));
  print FILE2 @line,"\n";
}

close (FILE1);
close (FILE2);

我在这个文件中得到的输出是:

F3.txt

a1b1c1tom1
d2e2f2bob2 

但预期的输出如 F2.txt 所示。您能帮我找出代码中的错误以获得所需的结果吗?

4

3 回答 3

2

您可以使用加入:

print FILE2 join("\t", @line),"\n";

或者:

print FILE2 "@line\n";
于 2012-08-08T07:06:58.387 回答
0
use strict;
use warnings;

open FILE1, "<final.l";
open FILE2, ">>finala11.l";

my ($line, @line);
while () {
  $line = $_;
  chomp($line);
  @line = split(" ", $line, 2);     # <<

  push(@line, "\t", shift(@line));  # <<
  print FILE2 @line, "\n";
}

close(FILE1);
close(FILE2);

谢谢我刚刚更正了突出显示的行并获得了所需的输出

于 2012-08-08T07:10:15.843 回答
0

将自动拆分与数组切片相结合:

$ perl -F/\t/ -lane 'print join "\t", @F[1..$#F,0]' f1.txt > f2.txt
于 2012-08-08T11:02:03.127 回答