我正在尝试读取一个文本文件(使用perl),其中每行有几条记录,如下所示:
r1c1 & r1c2 & r1c3 \\
r2c1 & r2c2 & r2c3 \\
因此,&
是记录分隔符。
Perl的帮助说明了这一点:
$ perl -h
-0[octal] specify record separator (\0, if no argument)
为什么你会使用八进制数超出我的范围。但是046
是分隔符&
的八进制ASCII,所以我尝试了这个:
perl -046 -ane 'print join ",", @F; print "\n"' file.txt
所需的输出为
r1c1,r1c2,r1c3 \\
r2c1,r2c2,r2c3 \\
但它不起作用。你是怎么做到的?
答案 0 :(得分:7)
我认为你正在混合两件事。 -0影响的记录分隔符是将输入分为“行”的内容。 -a
将每个“行”分成@F
,默认情况下为空格。要更改-a
拆分的内容,请使用-F
开关,例如-F'&'
。
答案 1 :(得分:1)
如果对perl命令行选项有疑问,请在命令行中查看perldoc perlrun
。
此外,如果您使用-l选项{{1}},它会删除每行的行尾(EOL)字符,然后将其传递给您的脚本,并为每次打印添加它,所以你不要需要在代码中加上“\ n”。一个班轮中的字符越少越好。