我无法使用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 ^^^^^^^^^^^^^^^
答案 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 $_;
}