次の入力ファイルがあります。
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
5番目の列は単一文字です。ただし、場合によっては、4番目の列(2行目など)または文字列(最後の行など)にある場合があります。 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
行を別の文字でのみ表示したい場合
メモ:2 番目の例では、記号は次の空の\>文字列と一致します。
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