2013-05-03 3 views
0

정상적으로 명령 줄을 통해 새 파일을 만들려면 touch filename을 사용할 수 있습니다. 그러나 텍스트 파일에는 약 500 개의 도시와 주 목록이 새 줄에 있습니다. 명령 줄을 사용하여 각 도시/주에 대한 새 텍스트 파일을 만들어야합니다. 예 : Texas.txt, New York.txt, California.txt명령 줄을 사용하여 텍스트 목록에서 파일을 만드시겠습니까?

목록이 들어있는 파일의 이름은 newcities.txt입니다. 명령 행이나 Perl을 통해 가능합니까?

답변

1

간단한 방법 :

cat fileName | xargs touch 
+0

더 나은 :'xargs touch

+0

더 나은 : xargs -a 파일 이름 터치 –

+0

원래 질문의 예에서 "New York"은 "New"와 "York"이라는 두 개의 파일을 생성합니다. . – mivk

3

당신은 직접 쉘에서 펄 여기

cat myfile | while read f; do echo "Creating file $f"; touch "$f"; done 
+0

완벽하게 작동했습니다. 감사! – user2347690

+0

당신의 경우 Youn 솔루션은 더 짧을 것입니다. 나는 당신이 원하는대로 한 줄에 여러 개의 복잡한 명령을 포함 할 수 있기 때문에 이것을 선호한다. if, 등등을 사용해도 ';'로 얼싸 안는다. – Devolus

1

에 대한 필요성이 작업을 수행 할 수없는 각 도시가 새로운 라인 여기

perl -ne 'chomp; `touch $_`;' newcities.txt 

에있는 스크립트를 것 가정 perl에서 한 줄의 버전 :

#!/usr/bin/perl 

use warnings; 
use strict; 

open my $fh, "<", "./newcities.txt" 
    or die "Cannot open file: $!"; 

while(my $line = <$fh>){ 
    chomp $line; 
    system("touch $line"); 
} 
close $fh; 
+0

파일 이름 앞에'. /'는 필요 없다. – TLP

+0

gaah, 당신은 쉘이 그 이름들로 끔찍한 일을하도록 할 것입니다. 이것을 사용하십시오 :'perl -lne 'system touch => $ _'newcities.txt' –

+0

@JulianFondren 당신은 무엇에 관해 이야기하고 있습니까? 당신의 개선이 무엇인지 명확하지 않습니다. '-l' 자동 chomps? 왜 지구상에서 "뚱뚱한 쉼표"를 원하십니까? 여기에 특별한 용도가 있습니까? 그렇지 않다면, 그냥 자리를 비 웁니다. 예를 들어 다음과 같은 목록을 가지지 않을 것입니다 :'my @l = ('a'=> 'b'=> 'c');'. 나는 너를 할 수 있음을 의미하지만 너는 그렇게해서는 안된다. – chrsblck

2
perl -lnwe 'open my $fh,">", "$_.txt" or die "$_: $!";' cities.txt 

입력을 autochomp하는 -l 옵션을 사용. open은 새로운 빈 파일을 만들고 범위를 벗어나면 파일 핸들이 자동 폐쇄됩니다.

+0

대부분의 다른 답변과 달리 이것은 단순한 공백 때문에 sh * t를 즉시 생성하지 않습니다. 그래도's/[\/\ &\|;] +/-/g'와 같은 것을 추가하는 것이 더 좋을 것이며 더 포괄적으로 확장 될 수 있습니다. – mivk

관련 문제