2017-01-03 6 views
-1

"、"でファイルを分割しようとしています。これはCSVファイルです。Perl - "/"カンマで分割すると問題が発生します

ただし、1つの「列」には「/」と空白を含む値があります。そして、それはそのコラムで驚いているようだし、そのコラムの後には何も印刷しませんが、次の行に移動します。

私のコードは単純です:

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

basefile.txtは、次のようになります。私が手

代わり
"1","filename1" 
"2","filename2" 
"3","filename3" 

"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", 
"2", 
"3", 

ありがとうございます!

+1

-aフラグの使用を停止し、ちょうど

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

を言うか-a-F...オプションを活用し、言うべき?そうすれば、 '$ F [0]'は最初のスペースまたはタブまでのレコードの部分だけを含みます。それぞれのコマンドラインフラグが何をするのかを知り、 "前に働いた"呪文を盲目的に使うべきではありません。 – Borodin

答えて

5

ここでは混乱しているのは/ではありません。それは-aフラグと組み合わせたスペースです。試してみてください:

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

Text::CSV_XSを使用して分割してください。

+2

また、 '-F 'を指定し、' @ values'の代わりに '@ F'を使用します。 – melpomene

+4

Re "* Text :: CSV_XSを使って分割する*"、これが有効な唯一の答えです。 OPは明らかにCSV(例えば '1、" foo、bar "、..')を適切に引用しているので、 'split'(または' -a')はうまくいきません – ikegami

3

「/」ではなく、スペースです。

フラグ-aフラグにより​​、perlは各行の入力を分割し、変数を@Fに入れます。この分割操作の区切り文字は、コマンド行で-F区切り文字オプションを使用して上書きしない限り、空白です。

ように、指定された-lanフラグで入力

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

ため、perlのはあなただけで全体の行に分割操作をやりたいように思え

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

設定します。その場合、あなたは、なぜあなたは*自動split * `-a`フラグを使用している

perl -F/,/ -lane '@[email protected]; ...' 
+0

これは動作しません。入力は複数行のファイル、つまり "1"、 "text"、 "abc // 123 ///もう少しのテキスト//テキスト"、 "ファイル名" \ n "1"、 "text"、 "abc// 123 ///もう少しのテキスト//テキスト "、"ファイル名 "\ n" 1 "、"テキスト "、" abc // 123 ///もう少しのテキスト//テキスト "、"ファイル名 " – yondaimehokage

+0

@withaimehokageコメントでそれを読むのは難しいので、あなたの質問にそれを編集する必要があります。 – ThisSuitIsBlackNot

+1

また、「うまくいきません」という診断メッセージは役に立ちません。代わりに、エラーメッセージを含めて何が起こったのかを教えて、それがあなたが起こると予想されたものとどのように違うのかを説明する必要があります。 – mob

関連する問題