-4

我无法仅使用命令行使用 Perl 来实现这一目标,即使我填写它必须非常简单。我应该只读取只有一行的文件 IDAT0100F 并将其附加到文件 IDAT0300F 的每一行的末尾,从而在文件 IDAT0300F.out 中生成结果。我想对更多具有不同宽度和记录数的文件执行命令(IDAT0100F 保持不变)。提前致谢!

文件:IDAT0100F(不带扩展名)
201302201212120

文件:IDAT0300F(不带扩展名)
000164198506DTCV0
000164198506DTDP0
000164198506DTMO0
000164198506DTPR0
000164198506DTTR0

结果:IDAT0300F.out
000164198506DTCV0201302201212120
000164198506DTDP0201302201212120
000164198506DTMO0201302201212120
000164198506DTPR0201302201212120
000164198506DTTR0201302201212120
                 ^^^^^^^^^^^^^^^
4

1 回答 1

1

这可以通过一个简单的单线来完成。

perl -plwe 'BEGIN { $\=<> }' ida1.txt ida2.txt > ida.out

假设第一个文件包含标题,并且只包含一行。这将从第一个文件中读取一行,并将该行分配给输出记录分隔符$\,也就是附加到每个打印语句末尾的东西。这将与开关结合使用,该开关将从执行 BEGIN 块-l读取的行中删除换行符。

如果第一个文件包含更多行,您可以显式关闭该文件以防止从中读取更多行:

perl -plwe 'BEGIN { $\=<>; close ARGV; }' ida1.txt ida2.txt > ida.out

这个单行代码的完整代码是(为简洁起见,从 deparsed 版本中编辑):

BEGIN { $/ = "\n"; $\ = "201302201212120\n"; }
sub BEGIN {
    $\ = <>;
    close ARGV;
}
while (<>) {
    chomp $_;
}
continue {
    print $_;
}
于 2012-12-20T15:09:45.900 回答