
51 0 0 5
0 0.0 0.0 0
1 2 3 4 5 6 7 8
1, 2
0.998 0.567
3, 2 Rs12345
0.7 0.2
3, 2 Rs31256
0.56 0.311
3, 2 Rs25691
0 0
012.1313010310 0.1213212 0.2121331321
0.0121654564 0.254564564 0.25678646
0.02154 0.2485674354 0.2434
결과 출력은 다음과 같습니다.
3, 2 Rs12345
0.7 0.2
3, 2 Rs31256
0.56 0.311
3, 2 Rs25691
원하는 결과를 얻기 위해 sed를 사용했습니다.
sed -i -e '1,5d;/0 0/,$d' filename
이것은 작동하지 않았습니다. 나는 줄 수의 길이가 다른 여러 파일을 다루고 있습니다. 따라서 어떻게든 "0 0"과 그 이후의 모든 줄(데이터의 맨 끝)을 제거해야 합니다.
답변1
당신은 거의 맞았습니다 ...
sed -e '1,5d;/^0 0/,$d' genetics
3, 2 Rs12345
0.7 0.2
3, 2 Rs31256
0.56 0.311
3, 2 Rs25691
이것이 원하는 것이라면 -i를 다시 추가하세요.
답변2
perl
범위 연산자라는 좋은 기능이 있습니다. 이를 통해 다음과 같은 작업을 수행할 수 있습니다.
#!/usr/bin/env perl
use strict;
use warnings;
while ( <DATA> ) {
print if 6 ... /0 0/;
}
__DATA__
51 0 0 5
0 0.0 0.0 0
1 2 3 4 5 6 7 8
1, 2
0.998 0.567
3, 2 Rs12345
0.7 0.2
3, 2 Rs31256
0.56 0.311
3, 2 Rs25691
0 0
012.1313010310 0.1213212 0.2121331321
0.0121654564 0.254564564 0.25678646
0.02154 0.2485674354 0.2434
두 정규식, 줄 번호 또는 혼합 사이에 있는지 테스트할 수 있습니다.
하지만 살펴보면 다음과 같이 하는 것이 더 간단할 수도 있습니다.
while ( <DATA> ) {
next unless $. > 5;
last if /0 0/;
print;
}
편리하게 - 플래그를 사용하여 이 작업을 수행 -p
하여 하나의 라이너로 만들 수 있습니다.
perl -pe 'next unless $. > 5; last if /0 0/' your_file
우리가 그것을 사용하고 있기 때문에 last
처리가 중단되고 파일 읽기가 중지됩니다.
-p
라인을 변환하고 나중에 라인을 인쇄하는 것과 perl
비슷하게 동작하게 하는 옵션 입니다 .sed
답변3
sed -i -e '1,5d' -e '/0 0/,$d
"0 0"을 포함하는 줄이 고정된 위치에 있지 않은 경우.