awk 단어 앞의 빈 줄 일치

awk 단어 앞의 빈 줄 일치

매우 긴 파일이 있습니다(일부만 표시됨).

145 27262253 2093226 747883433 76303046 2.74331
146 27992017 2188217 747883433 76303046 2.8678
147 30385435 2433407 747883433 76303046 3.18913
148 31218703 2514902 747883433 76303046 3.29594
149 33852828 2660530 747883433 76303046 3.48679
150 36161756 2836045 747883433 76303046 3.71682

Alignments      747883433       76303046
Bases   111613795461    11392665612

1 40000373 2754292 838333186 82982133 3.31914
2 35955786 2451917 838333186 82982133 2.95475
3 33056935 2241392 838333186 82982133 2.70105
4 32241895 2172229 838333186 82982133 2.61771
145 29490370 2184347 838333186 82982133 2.63231
146 30252912 2282821 838333186 82982133 2.75098
147 32862262 2544600 838333186 82982133 3.06644
148 33769718 2631164 838333186 82982133 3.17076
149 36673113 2787718 838333186 82982133 3.35942
150 39222287 2975755 838333186 82982133 3.58602

Alignments      838333186       82982133
Bases   125129342261    12391027833

1 35736929 2509527 741319423 80995147 3.09837
2 32185143 2238927 741319423 80995147 2.76427
3 29595482 2043259 741319423 80995147 2.52269
4 28861157 1978254 741319423 80995147 2.44244

빈 줄을 일치시키고 싶습니다앞으로 Alignments말과 말 그 자체. 예상하다:

Alignments      747883433       76303046   

Alignments      838333186       82982133

가능합니까? 다른 빈 줄과 단어가 많이 있습니다 Alignments. 내 시도: | awk '{if($1 ~ /^[[:space:]]*Alignments/) {print $0}}'.그러나 다음을 얻습니다.

Alignments      747883433       76303046
Alignments      838333186       82982133

답변1

$ awk '/^$|^Alignments/' input.txt | uniq

Alignments      747883433       76303046

Alignments      838333186       82982133

uniq초과하지 않도록 하세요.하나줄 앞, 뒤, 사이에 빈 줄이 있습니다 Alignments.

grep대신 사용할 수 있습니다. 또는 sed -n. 또는 perl -n. 예를 들어

$ grep -E '^$|Alignments' input.txt | uniq

답변2

grep을 사용하지 않는 이유는 무엇입니까? :

grep -A1 "^$" file | grep -B1 'Alignments' | grep -v -- "^--$"

답변3

GNU awk 사용:

awk -v RS='\nAlignments[ 0-9]*' '{print RT}' file

레코드 구분자는 RS예상되는 일치로 설정되고 RT(레코드 종결자)는 각 레코드에 대해 인쇄됩니다.

답변4

Sed는 이러한 작업에 탁월합니다. 먼저, 현재 비어 있으면 현재 줄에 다음 줄을 붙여넣습니다. 그런 다음 설정된 기준이 충족되면 물어보고 인쇄하십시오.

$ sed -ne '
    /./!N
    /^\nAlignments/p
' file.txt 

관련 정보