【问题标题】:Perl + Append text from file1 to the end of every line of file2 in command line [closed]Perl +将file1中的文本附加到命令行中file2的每一行的末尾[关闭]
【发布时间】:2012-12-08 01:43:48
【问题描述】:

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

文件:IDAT0100F(不带扩展名) 201302201212120 文件:IDAT0300F(不带扩展名) 000164198506DTCV0 000164198506DTDP0 000164198506DTMO0 000164198506DTPR0 000164198506DTTR0 结果:IDAT0300F.out 000164198506DTCV0201302201212120 000164198506DTDP0201302201212120 000164198506DTMO0201302201212120 000164198506DTPR0201302201212120 000164198506DTTR0201302201212120 ^^^^^^^^^^^^^^^

【问题讨论】:

    标签: perl merge text-files


    【解决方案1】:

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

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

    假设第一个文件包含标题,并且只包含一行。这将从第一个文件中读取一行,并将该行分配给输出记录分隔符$\,也就是附加到每个打印语句末尾的东西。这将与 -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 $_;
    }
    

    【讨论】:

    • 谢谢你,这就是我努力实现的目标!如果所有文件都没有标题并且带有日期的文件只有一行,那么代码是什么? ))
    猜你喜欢
    • 2015-01-17
    • 2013-01-21
    • 2018-09-01
    • 2014-11-13
    • 1970-01-01
    • 2013-06-24
    • 2016-04-04
    • 2014-03-04
    • 2010-09-23
    相关资源
    最近更新 更多