[완료]perl 파일 내용수정

ascendo의 이미지

안녕하세요 perl 관련 한 질문입니다.

LUC1
1234
1233
1122
1225
1233

LUC2
4555
4585
4225
1124

LUC3
1555
1155

이런 파일 형식을

1234 LUC1
1233 LUC1
1122 LUC1
1225 LUC1
1233 LUC1

4555 LUC2
4585 LUC2
4225 LUC2
1124 LUC2

1555 LUC3
1155 LUC3

위의 형식으로 고치고 싶습니다.

그래서 코드를 짜 보았는데

아무것도 나오질 않네요..

  1 #!/usr/bin/perl
  2 
  3 open $file,'<',$ARGV[0];
  4 
  5 while(<$file>){
  6 
  7     if ($line[0]=~/LUC/)
  8     {
  9         $name=$line[0];
 10         print "$_\t$name\n";
 11     }
 12 }

고수분들의 많은 도움 부탁드립니다.

aero의 이미지

.
.
.
.

#!/usr/bin/perl
use strict;
use warnings;
 
open my $file,'<',$ARGV[0];
 
while ( my $line = <$file> ) {
    if ( $line =~ m/^LUC/ ) {
        chomp $line;
        while ( my $line2 = <$file> ) {
            chomp $line2;
            if ( $line2 =~ m/^\s*$/ ) {
                print "\n";
                last;
            }
            print "$line2\t$line\n";
        }
    }
}
pung96의 이미지

한줄로
perl -000 -aF'\n' -ne'$h=shift @F;print "$_ $h\n" for @F;print"\n"' try.txt

한줄코드는 한줄코드로서 용도가 있는거니까,, 암호같다고 뭐라고 그러진 마세요^^.

jick의 이미지

형님 존경합니다.
(보면 볼수록 오묘한 펄의 세계..)

ascendo의 이미지

두분다 정말 큰도움이 되었습니다.

한줄 스크립트는 정말 어렵네요 ^^

pung96의 이미지

JEEN의 이미지

은근남...
_________
use perl;

use perl;

pung96의 이미지

네이버 카페주소가 이상하네요

http://cafe.naver.com/perlstudy.cafe

doodoo의 이미지

근데..네이버에 가입해야 하는거죠? ㅠㅠ

pung96의 이미지

온오프믹스나,, 메일로도 참가 가능하세요^^

aero의 이미지

pung96님 것 보다 조금 짧습니다.

perl -000 -ne '($k,@a)=split/\n/;print map("$_ $k\n",@a),"\n"' try.txt

bushi의 이미지

일없는 bash

while read R; do [ -z "$R" ] && L=""; _L=${R#LUC}; [ "$_L" == "$R" ] && echo "$R" "$L" || L=$R; done < try.txt

OTL

doodoo의 이미지

설명좀 부탁 드립니다...

특히 ...

 _L=${R#LUC}

이 부분..._L 에 R 에 값이 있으면 1 이 들어가는것 아닌가요?
bushi의 이미지

$R 에서 ^LUC 를 검사한다음,
있다면 그것을 잘라내고 나머지를 _L 에 복사합니다.
없다면 $R 이 그대로 _L 에 복사됩니다.

$_L 과 $R 을 비교해서,
틀리다면 L 에 $R 을 복사합니다.
같다면 $R $L 을 출력합니다.

[ -z "$R" ] && L=""
요놈은 빈 줄을 빈 줄로 출력하기 위해 들어간 놈입니다.

그 밖에 눈에 띄지 않는 shell 테크닉으로... IFS 분리기능을 이용해서 '빈 줄' 을 '빈 줄'로 확실하게 처리한다는 것 정도.

OTL

ai의 이미지

좀 더 줄여 볼까요 :-)

perl -pe '$,=$&,s,.*,,s if m;LUC.*;;s;\d+;$& $,;' try.txt

--
War doesnt determine whos right, just whos left.

War doesnt determine whos right, just whos left.

aero의 이미지

굿샷임다.
그런데 의도적으로 특수변수와 구분자로 꼬아 놓으셔서
Perl이 이해하기 힘들다라는 편견을 줄 수 있을 것 같네요.
다른 분들이 보기 좋게 고치면

perl -pe '$k=$&, s/.*//s if m/LUC.*/; s/\d+/$& $k/' try.txt

저런 코드가 실제로 Perl에서 어떻게 해석되는지 보려면
perl -MO=Deparse -pe '$k=$&, s/.*//s if m/LUC.*/; s/\d+/$& $k/' try.txt

결과
LINE: while (defined($_ = <ARGV>)) {
    $k = $&, s/.*//s if /LUC.*/;
    s/\d+/$& $k/;
}
continue {
    print $_;
}
shockyhan의 이미지

gawk '/^LUC/ { name=$0; getnext; } /^[0-9].*/ { print $0, name; }' luc.dat

perl이 아니라서 죄송합니다. ^^;
===========================================================================
Shocky Han
BIM Consultant, Certified Information Systems Auditor
Seoul, Korea.
===========================================================================

===========================================================================
Shocky Han
BIM Consultant, Certified Information Systems Auditor
Seoul, Korea.
===========================================================================

doodoo의 이미지

이제 어느분께서 파이선 버젼을 보여 주시겠습니까?

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.