줄의 일부를 선택하고 붙여넣어 다른 파일을 만드는 방법은 무엇입니까?

줄의 일부를 선택하고 붙여넣어 다른 파일을 만드는 방법은 무엇입니까?

다음과 같은 방법으로 데이터를 정리하는 데 도움을 주셨으면 합니다. 내 입력 데이터는 다음과 같습니다.

입력 파일:

1   2   1   0.6007  0.1 0.3 0.2 0.7 0.7 0   2   0.3073  0.1 0.1 0.2 0.4 0.7 0.5
2   2   1   0.4022  0.1 0.3 0.2 0.7 0.7 0   2   0.5085  0.1 0.1 0.2 0.4 0.7 0.5
3   2   1   0.0029  0.1 0.3 0.2 0.7 0.7 0   2   0.9078  0.1 0.1 0.2 0.4 0.7 0.5
4   2   1   0.0692  0.1 0.3 0.2 0.7 0.7 0   2   0.8805  0.1 0.1 0.2 0.4 0.7 0.5

내가 원하는 출력 파일은 다음과 같습니다.

결과물 파일:

1   2                               
        0.6007  1   0.1 0.3 0.2 0.7 0.7 0
        0.3073  2   0.1 0.1 0.2 0.4 0.7 0.5
2   2                               
        0.4022  1   0.1 0.3 0.2 0.7 0.7 0
        0.5085  2   0.1 0.1 0.2 0.4 0.7 0.5
3   2                               
        0.0029  1   0.1 0.3 0.2 0.7 0.7 0
        0.9078  2   0.1 0.1 0.2 0.4 0.7 0.5
4   2                               
        0.0692  1   0.1 0.3 0.2 0.7 0.7 0
        0.8805  2   0.1 0.1 0.2 0.4 0.7 0.5

답변1

또 가자 slm :)

명령줄에서 Perl의 유사한 메커니즘:

perl -ane 'print "$F[0]   $F[1]\n        $F[3]   $F[2]   @F[4..9]\n" .
    "        $F[11]   $F[10]   @F[12..17]\n"' inputfile

-ninputfile각 줄을 루프로 처리합니다. -a필드 구분 기호(기본적으로 공백)를 중심으로 각 줄을 분할하고 이를 특수 배열에 할당한 @F다음 -e지정된 perl 명령에 전달합니다(필요한 기호에 공백과 개행 문자를 사용하여 원하는 순서로 요소를 인쇄하기만 하면 됩니다).

이것을 Perl 스크립트 파일에 넣으십시오:

#! /usr/bin/perl -an 

print "$F[0]   $F[1]\n        $F[3]   $F[2]   @F[4..9]\n" .
     "        $F[11]   $F[10]   @F[12..17]\n";

Chmod 파일( chmod u+x perlscript)을 입력하고 ./perlscript inputfile.

> outputfile출력을 다른 파일에 넣어야 하는 경우 명령 끝에 넣으면 됩니다. (이는 명령줄에서 직접 사용된 첫 번째 예와 동일합니다.)

./perlscript inputfile > outputfile

답변2

다음은 무차별 대입 방식을 사용하는 것입니다 awk.

$ awk '
    {print $1"   "$2}
    {print "\t"$4"  "$3"   "$5,$6,$7,$8,$9,$10}
    {print "\t"$12"  "$11"   "$13,$14,$15,$16,$17,$18}
  ' input.file
1   2
        0.6007  1   0.1 0.3 0.2 0.7 0.7 0
        0.3073  2   0.1 0.1 0.2 0.4 0.7 0.5
2   2
        0.4022  1   0.1 0.3 0.2 0.7 0.7 0
        0.5085  2   0.1 0.1 0.2 0.4 0.7 0.5
3   2
        0.0029  1   0.1 0.3 0.2 0.7 0.7 0
        0.9078  2   0.1 0.1 0.2 0.4 0.7 0.5
4   2
        0.0692  1   0.1 0.3 0.2 0.7 0.7 0
        0.8805  2   0.1 0.1 0.2 0.4 0.7 0.5

다음은 for 루프를 사용하여 열 연결을 수행하는 약간 더 간단한 버전입니다.

$ awk '
    {print $1"   "$2}
    {printf("\t%s  %s   ",$4,$3)}
    {for(i=5;i<=10;i++)printf("%s ",$i);print ""}
    {printf("\t%s  %s   ",$12,$11)}
    {for(i=13;i<=18;i++)printf("%s ",$i);print ""}
  ' input.file

관련 정보