0

これは固定形式で、メモ帳やウルトラエディットで開くとこのように表示されます。これはほんの一部のサンプル データですが、私のテキスト ファイルには、例のように約 200,000 行と複数のディレクトリが含まれています。したがって、基本的には、「Directory of V:​​ \word」と表示されているパスを追加し、「V:\word」を行末に追加して、新しい「Directory of V:\word\excels" の後に "V:\word\excels" などを追加します。私を助けて、犬の骨を投げてもらえませんか? ありがとうございました!

 Directory of V:\word
04/30/2007  11:49 AM        938,458   BUILTIN\Admin       Filename.pdf
04/06/2012  01:13 PM          3,801   AMERICAS\DoeJ       Filename3.pdf
01/11/2007  12:05 PM         26,624   BUILTIN\Admin       Filename2.doc
08/01/2007  11:57 AM         18,432   BUILTIN\Admin       Filename5.xls
 Directory of V:\word\excels
03/03/2010  10:42 AM         35,840   AMERICAS\DavisF     Billing3-3.xls
02/24/2010  10:31 AM         34,380   AMERICAS\StewartF   Allie2-24.xls

これが私が達成しようとしていることです

 Directory of V:\word
04/30/2007  11:49 AM        938,458   BUILTIN\Admin       Filename.pdf     V:\word
04/06/2012  01:13 PM          3,801   AMERICAS\DoeJ       Filename3.pdf    V:\word
01/11/2007  12:05 PM         26,624   BUILTIN\Admin       Filename2.doc    V:\word
08/01/2007  11:57 AM         18,432   BUILTIN\Admin       Filename5.xls    V:\word
 Directory of V:\word\excels
03/03/2010  10:42 AM         35,840   AMERICAS\DavisF     Billing3-3.xls   V:\word\excels
02/24/2010  10:31 AM         34,380   AMERICAS\StewartF   Allie.xls        V:\word\excels



これは私が perl で持っているものです: 私はまだ立ち往生していますが、私はいくらか進歩していると思います.

    #!/usr/bin/perl 
    use strict 
    use warnings 
    use autodie

    open (MYFILE, 'List.txt');
    my $str = " Directory of V:\word";
    while (<MYFILE>)
    {
        chomp;
        ($Date, $Time, $Size, $User, $Filename) = split("\t");
        print $Date, $Time, $Size, $User, $Filename, substr $str,14;

        print "$_\n";
    }
    close (MYFILE);
4

4 に答える 4

1

@Pichi のワンライナーは、ファイルが stdin で指定されているか、引数として渡されている場合に、必要なことを行います。少し不透明なので、明示的な方法で行っていることは次のとおりです。

# What's this doing?  perl -lpe'/ Directory of (.*)/?$a=$1:($_.="\t$a")'

my $suffix;                              # Pichi uses $a, a quietly special var I usually avoid

while (defined(my $line = <ARGV>)) {     # Magic ARGV filehandle - stdin or arguments
  chomp($line);                          # Remove newline (-l switch)

  if ($line =~ / Directory of (.*)/) {   # This is the ?: clause
    $suffix = $1;
  } else {
    $line .= "\t$suffix";
  }

  print "$line\n";                       # Print (-p) with newline (-l, again)
}

Perl の便利なワンライナーは、実際にはそれよりも少し多くのことを行います (たとえば、$/and$\は明示的に設定され、printはエラーチェックされます) が、本質的にはそれがアプローチです。

于 2013-08-30T17:36:59.960 に答える
0

なぜawkしないのですか?

awk '/ Directory of /{at=$3;print;next}{print $0""FS""at}' your_file

パール:

perl -lne 'if(/ Directory of (.*)/){$a=$1;print}else{$_.="\t".$a;print}' your_file

インライン置換を行う場合:

perl -i -lne 'if(/ Directory of (.*)/){$a=$1;print}else{$_.="\t".$a;print}' your_file
于 2013-08-30T06:40:40.793 に答える