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 に答える