perl 특정라인 삭제

anakia의 이미지

perl을 잘 하지는 못하는데 한번 보면 좋을거 같아서...

궁금한것은 텍스트파일을 열었을때 1~1000 번째 라인까지 있으면
1~100까지 라인은 그냥 두고 나머지 라인을 삭제 하고 싶은데
어떻게 짜야 할지 ..

익명 사용자의 이미지

perl -ne 'print if (1..100)' old.txt > new.txt
keedi의 이미지

다른 분께서 답변을 달아주신 코드에 대해 간단하게 설명을 드리면 이렇습니다.

-n 옵션을 썼기 때문에 인자로 받는 파일 old.txt를 줄 단위로 읽습니다. while문을 쓴것과 동일한 효과입니다.

-e 옵션은 'print if (1..100)' 구문을 실행하는 것이구요.

'print ...' 구문은 -n 덕분에 'while (한줄씩 처리) { print ... }' 구문과 동일합니다.

'print if (1..100)'에서 '..'는 스칼라 문맥(scalar context)에서 쓰였기 때문에 범위연산자(range operator)입니다. 범위 연산자의 경우 1번째 줄에서 100번째 줄인지를 확인해 불리언 값을 반환하는 플립플롭 역할을 합니다. 말 그대로 1~100번째 줄일때만 출력을 하겠죠.

print에 인자가 없얼 경우(if는 수정자(modifier)입니다) $_를 출력합니다. 이미 -n 옵션을 사용했기 때문에 각각의 줄은 $_에 저장되어 있습니다.

Enjoy Perl! :-)

----
use perl;

Keedi Kim

anakia의 이미지

감사합니다~!

imyaman의 이미지

비슷한 건데, 좀 더 길게 써봤습니다. 좀 더 길게 쓰면 성의있어보일까봐...
저는 컴맹이예요. 코드가 좋지는 않아요.

아래 코드는 1to100.pl으로 저장해주세요.
꼭 1번 줄부터 100줄만 잘라주지는 않습니다만.

이렇게 답변 쓰면 조금 더 많은 사람이 perl을 쓰지 않을까 하는 꿈을 꿉니다.
혹시 이해 안 되면 메일(imyaman@netscape.net), 댓글 주세요.

공부하는 목적이라면, 두번째 인자와 세번째 인자가 숫자인지 확인하고, 숫자가 아니면 안내문구를 출력하는 코드를 추가해BoA요.

#!/usr/bin/perl
# program name : 1to100.pl

use strict;

# 명령행 인자를 3개 받습니다. 3개가 아니면 사용방법을 출력합니다.
# 첫번째 인자는 파일이름, 두번째 인자는 출력할 첫행 번호, 세번째 인자는 마지막 행 번호
if(@ARGV < 3 ){
print "usage : 1to100.pl FILENAME STARTLINE ENDLINE\n";
exit 1;
}

# 변수를 정해보았어요. 필요한 변수를 머리 속에 정리해 두면 좀 더 똑똑해질 지도 몰라요.
my ($filename,$start, $end);
my ($i);
my $line;

# 명령행 인자로 받은 내용을 읽기 쉬운 이름의 변수에 옮겨 넣었습니다. 귀찮지만 해야할 일이예요.
$filename = $ARGV[0];
$start = $ARGV[1];
$end = $ARGV[2];

# 처리할 파일을 엽니다. 못 열면 죽어요.
open FN, "<$filename" or die "1to100.pl : can't open the file $filename\n";

# 파일의 내용을 한 줄씩 읽습니다. start에서 end 사이의 내용만 출력해요. start 이전의 행은 그냥 넘어가요. 카운터($i)가 end보다 커지면 끝나요.
# goto를 썼는데, goto가 반드시 모든 상황에서 나쁜 것은 아니예요.
$i=0;
while($line=){ #혹시코드가 안 보이면 $line=<FN>
if($i>$start){
if($i<$end){
print($line);
}else{
goto ENDPROGRAM;
}
}
$i++;
}

ENDPROGRAM:
close FN;
exit 0;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.