我正在尝试用“,”拆分文件。这是一个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",
谢谢!
答案 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; ...'