Perl - “/”导致用逗号分割的问题

时间:2017-01-03 17:08:51

标签: perl

我正在尝试用“,”拆分文件。这是一个CSV文件。

但是,一个“列”的值包含“/”和空格。而且它似乎对该列感到不满,并且在该列之后不会打印任何内容,但会移动到下一行。

我的代码很简单:

perl -lane '@values = split(",",$F[0]);  print $values[0]."\t".$values[3];' basefile.txt > newfile.txt

basefile.txt看起来像:

"1","text","abc // 123 /// some more text // text","filename1"
"2","text","abc // 123 /// some more text // text","filename2"
"3","text","abc // 123 /// some more text // text","filename3"

我的newfile.txt应该有一个输出:

"1","filename1"
"2","filename2"
"3","filename3"

相反,我得到:

"1",
"2",
"3",

谢谢!

2 个答案:

答案 0 :(得分:5)

这里不是/令人困惑的perl,它是与-a标志相结合的空格。尝试:

perl -lne '@values = split(",",$_); print $values[0]."\t".$values[3]' basefile

或者,更好的是,使用Text::CSV_XS进行拆分。

答案 1 :(得分:3)

不是'/',而是空格。

-a标志使perl分割每行输入并将字段放入变量@F。此拆分操作的分隔符是空格,除非您在命令行上使用-F 分隔符选项覆盖它。

所以输入

"1","text","abc // 123 /// some more text // text","filename"

指定了-lan标志,perl sets

$F[0] = '"1","text","abc';
$F[1] = '//';
$F[2] = '123';
$F[3] = '///';
$F[4] = 'some';
etc.

您似乎只想在整条线上进行拆分操作。在这种情况下,您应该停止使用-a标志,然后说

@values = split(",",$_); ...

或利用-a-F...选项并说

perl -F/,/ -lane '@values=@F; ...'