2013-11-21 3 views
-4

다음과 같은 파일이 있습니다.perl에서 한 줄에서 여러 줄로 변환

ID || DATE || AMOUNT 
XX||[email protected]@[email protected]@[email protected]@20131101||[email protected]@[email protected]@[email protected]@400 

및 다음과 같이 출력하려면 perl을 사용하십시오.

xx||20130801||100 

xx||20130901||200 

xx||20131001||300 

xx||20131101||400 

변환 방법을 도와주세요.

+1

당신의 시도가 실패 하는가? – benka

+4

'perldoc perlintro' – toolic

+2

downvotes에 실망하지 마십시오. 여기에 질문을 게시하기 전에 스택 오버플로 관련 질문을 읽으십시오. 네가 숙제를하지 않으면 잔인한 곳이야. – slayedbylucifer

답변

1
perl -F'\|\||@@' -lanE'$.>1 or $" ="||",next; say "@F[0,$_,$_+4]" for 1..4' file 
+0

은 원 - 라이너를 고맙게 생각합니다. 그러나이 4 개의 항목에 대한 하드 코드. OP가 그것에 대해 언급하지는 않았지만, 나는 명령이 많은 수의 엔트리에 대해 일반적이어야한다고 생각한다. – jkshah

+1

@jkshah for 1 .. $ # F/2'이이 문제를 해결했습니다 –

+0

이제 솔루션이 걸작이라고해야합니다! – jkshah

1
perl -F'\|\|' -lane '@a=split(/@@/,$F[1]); @b=split(/@@/,$F[2]); print "$F[0]||$a[$_]||$b[$_]" foreach 0..$#a;' file 

출력 :

ID || DATE || AMOUNT 
XX||20130801||100 
XX||20130901||200 
XX||20131001||300 
XX||20131101||400 
+1

당신의 제안에 대해 –

+0

@mpapec 오해의 소지가 있으므로 항상 void 문맥에서 map 대신 foreach를 사용하십시오. ans가 업데이트되었습니다. 나는 foreach와 for의 차이가 있는지 궁금해했다. 당신은 당신의 코드에서'for'를 사용하는 것처럼 보이고 둘 다 잘 동작합니다. – jkshah

+2

+1, 당신이 좋아하는 것을 사용하십시오, 그들은 동의어입니다 http://perldoc.perl.org/perlsyn.html#Foreach-Loops –

관련 문제