4개의 열과 10000개의 행의 데이터가 있습니다. 두 번째 열의 값이 이전 행의 세 번째 열보다 작은 행을 삭제하려고 합니다.
chr1 10 20 3
chr1 15 30 9
chr1 55 60 1
답변1
awk '$2 >= prev; {prev=$3}' file.txt
설명하다
awk <commands> file.txt
: awk를 실행하세요file.txt
.$2 >= prev
: 두 번째 필드가$2
변수의 내용보다 크거나 같은지 확인합니다prev
. (첫 번째 줄은 설정되지 않습니다.) 이것이 true이면 awk는 기본적으로 전체 줄을 인쇄합니다. (즉, 다음보다 작으면 행을 삭제합니다.){prev=$3}
: 세 번째 필드의 내용을$3
변수에 저장합니다prev
.
그런 다음 다음 행에 대해 이를 반복합니다. awk는 두 번째 필드를 prev
이전 행의 세 번째 필드를 포함하는 와 비교합니다. 참고할 몇 가지 사항이 있습니다.
- 첫 번째 행에 무엇을 원하는지 잘 모르겠으므로 필요에 따라 수동으로 포함/제외하겠습니다.
- 데이터가 실제로 탭으로 구분된 경우 awk에 다음 플래그를 추가하여 이를 알립니다
-F'\t'
.