다음과 같은 입력 파일이 있습니다.
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