如何为`perl -a`指定列分隔符?

时间:2011-04-03 20:36:56

标签: perl

我正在尝试读取一个文本文件(使用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 \\    

但它不起作用。你是怎么做到的?

2 个答案:

答案 0 :(得分:7)

我认为你正在混合两件事。 -0影响的记录分隔符是将输入分为“行”的内容。 -a将每个“行”分成@F,默认情况下为空格。要更改-a拆分的内容,请使用-F开关,例如-F'&'

答案 1 :(得分:1)

如果对perl命令行选项有疑问,请在命令行中查看perldoc perlrun

此外,如果您使用-l选项{​​{1}},它会删除每行的行尾(EOL)字符,然后将其传递给您的脚本,并为每次打印添加它,所以你不要需要在代码中加上“\ n”。一个班轮中的字符越少越好。