열 대신 특정 위치에서 단어별로 행을 추출하는 방법은 무엇입니까?

열 대신 특정 위치에서 단어별로 행을 추출하는 방법은 무엇입니까?

다음과 같은 입력 파일이 있습니다.

                     v
ATOM     57  O   LYS A   7       2.254  25.484  18.942  1.00 14.46
ATOM     77  NH1AARG A   8       5.557  19.204  13.388  0.55 24.50
TER    1648      ILE C 206
HETATM 1668  O   HOH A1023      25.873  38.343   2.138  1.00 21.99
                     ^

A표시된 위치에만 행을 포함하면 됩니다. 첫 번째 행과 마찬가지로 대부분의 행에서 A다섯 번째 열은 단일 문자입니다. 그러나 경우에 따라 네 번째 열(두 번째 행 등)이나 문자열(마지막 행 등)에 있는 경우도 있습니다. 22자 외에는 단일 문자 가 A나타날 수 있지만 여기에 나타나는 경우에만 관심이 있습니다.

A단일이든 문자열이든 관계없이 다음과 같은 행만 포함하려면 출력이 필요합니다 .

ATOM     57  O   LYS A   7       2.254  25.484  18.942  1.00 14.46
ATOM     77  NH1AARG A   8       5.557  19.204  13.388  0.55 24.50
HETATM 1668  O   HOH A1023      25.873  38.343   2.138  1.00 21.99

A하지만 때로는 열에 관계없이 단일 행만 추출하고 싶을 때도 있습니다 .

ATOM     57  O   LYS A   7       2.254  25.484  18.942  1.00 14.46
ATOM     77  NH1AARG A   8       5.557  19.204  13.388  0.55 24.50

답변1

당신은 그것을 사용할 수 있습니다

grep -E '^.{21}A' file

이와 같은 사례를 포함하려는 A1023경우

grep -E '^.{21}A\>' file

A줄을 별도의 문자로만 표시하려는 경우

노트:두 번째 예에서 기호는 \>뒤에 오는 빈 문자열과 일치합니다.

grep 매뉴얼 페이지에서

백슬래시 문자 및 특수 표현식

기호는 각각 단어의 시작과 끝 부분에 있는 빈 문자열 \<과 일치합니다. \>이 기호는 \b단어 가장자리에 있는 빈 문자열과 일치하고 \B단어 가장자리에 있지 않은 빈 문자열과 일치합니다. 기호는 \w의 동의어 [_[:alnum:]] 이며 \W의 동의어입니다 [^_[:alnum:]].

답변2

큰 타격:

while IFS= read -r line; do 
    [[ ${line:21:2} == "A " ]] && echo "$line"
done < file

답변3

> awk -v FS= '{ print $22 }' file
A
A
C
A

> awk -v FS= '$22=="A" { print; }' file
ATOM     57  O   LYS A   7       2.254  25.484  18.942  1.00 14.46
ATOM     77  NH1AARG A   8       5.557  19.204  13.388  0.55 24.50
HETATM 1668  O   HOH A1023      25.873  38.343   2.138  1.00 21.99

답변4

그리고 GNU grep:

$ grep -P '\bA\b' file
ATOM     57  O   LYS A   7       2.254  25.484  18.942  1.00 14.46
ATOM     77  NH1AARG A   8       5.557  19.204  13.388  0.55 24.50

관련 정보