2011-11-10 2 views
0

다음 코드 (Perl/Cygwin)에 문제가 있습니다.perl 호출 xargs : 줄 끝 구분 기호가 작동하지 않음

#!/usr/bin/perl 
open FILE, ">", "filename.txt" or die $!; 
print FILE "A\n"; 
print FILE "B\n"; 
print FILE "C\n"; 
close (FILE); 
system("xargs echo E < filename.txt"); 

echo 3 번 호출하여

E A 
E B 
E C 

를 출력하려고합니다. 대신

E A B C 

xargs 구분 기호 설정을 사용하여 여러 가지를 시도해 보았습니다. 누구든지 도와 줄 수 있습니까?

+0

또한 http://stackoverflow.com/questions/199266/make-xargs-execute-the-command-on-for-each-line-of-input-을 (를) 참조하십시오. 왜 SO 검색에서 나를 포기하지 않았습니까? ? 그럼에도 불구하고 SO가 이것을 제기합니다. – paperjam

답변

4

시도 xargs를 -n1 에코 E < 파일 이름 .txt

1

'xargs를이'무엇을해야 정확하게하고있다. Perl이 할 수있는 일을 수행하기 위해 외부 프로세스를 생성하는 이유는 무엇입니까? 대신, 파일을 닫고 수행

open FILE, '<', 'filename.txt' or die $!; 
while (<FILE>) { 
    print "E $_"; 
} 
+0

xargs -P를 사용하여 작업을 병렬로 실행하고 싶습니다. 펄 역시이 일을 할 수 있다는 것을 압니다. – paperjam

+0

@paperjam : OP에서 병렬 실행이 언급되어 있어야합니다. '에코'를 병렬로 실행하는 것이 무의미하기 때문에 이러한 답변 중 많은 부분이 중점을두고 있으므로 '에코'이상의 기능을 수행하기를 바랍니다. – runrig

+0

@paperjam : Bil Ruppert의 제안을 사용하고 'P '인수를 추가하십시오. – JRFerguson

0
open my $file, '<', 'filename.txt' or die $!; 
while (<$file>){ 
    print "E $_"; 
} 
1

포크를 사용하지 이유 :

my @arr = qw(A B C); 
for my $c (@arr) { 
    fork and next; 
    exec(echo => $c); 
} 

이 좀 더 검증을 사용할 수 있습니다, 당신은 얼마나 많은 동시 프로세스 당신이보다 효율적으로 제어를 얻을 수 있습니다 Parallel::ForkManager과 같은 것으로, 나는 당신이 정말로 '에코'보다 더 복잡한 것을하고 있다고 가정합니다.

+0

'xargs -P x'는 이미'Parallel :: ForkManager'보다 적은 문자이며 작업을위한 완벽한 도구입니다. – paperjam

+0

@paperjam - 적은 문자입니까? 임시 파일에 쓰고 있습니다. 얼마나 많은 문자 (그리고 얼마나 많은 불필요한 작업)가 있습니까? – runrig