Perl +在file1中将文本附加到命令行中file2的每一行的末尾

时间:2012-12-20 14:02:26

标签: perl merge text-files

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

FILE: IDAT0100F (without the extension)
201302201212120

FILE: IDAT0300F (without the extension)
000164198506DTCV0
000164198506DTDP0
000164198506DTMO0
000164198506DTPR0
000164198506DTTR0

RESULT: IDAT0300F.out
000164198506DTCV0201302201212120
000164198506DTDP0201302201212120
000164198506DTMO0201302201212120
000164198506DTPR0201302201212120
000164198506DTTR0201302201212120
                 ^^^^^^^^^^^^^^^

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

这个单行的完整代码是(为了简洁起见而编辑):

BEGIN { $/ = "\n"; $\ = "201302201212120\n"; }
sub BEGIN {
    $\ = <>;
    close ARGV;
}
while (<>) {
    chomp $_;
}
continue {
    print $_;
}