다음과 같은 방법으로 데이터를 정리하는 데 도움을 주셨으면 합니다. 내 입력 데이터는 다음과 같습니다.
입력 파일:
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
-n
inputfile
각 줄을 루프로 처리합니다. -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