次のファイルがあります。
TITLE Protein in water t= 0.00000
REMARK THIS IS A SIMULATION BOX
ATOM 1 N SER A 107 20.799 63.728 25.985 1.00 0.00 N
ATOM 2 H1 SER A 107 21.658 64.259 25.980 1.00 0.00 H
これは非常に大きなファイルです:1.6G
2000万行が少し以上です。開始しない行を取得したいです。ATOM
そして終了しH
、別のファイルに保存します。これを行う最も効率的な方法は何ですか?
ベストアンサー1
コメントの説明によると、
sed -n '/^ATOM.*H$/!p' input > output
「ATOM」で始まり、「H」で終わる行は名前付きファイルから削除(印刷されません)され、残りの行は名前付きファイルinput
に印刷されますoutput
。 sed 構文は左から右へ:
-n
- デフォルトでは行を印刷しない/^ATOM.*H$/
- ATOMで始まり、その後に任意の数の文字が続き、$
H()で終わる行を探します。!p
- 印刷ラインいいえ上記のパターンを合わせる
入力ファイルの例:
TITLE Protein in water t= 0.00000
REMARK THIS IS A SIMULATION BOX
ATOM 1 N SER A 107 20.799 63.728 25.985 1.00 0.00 N
ATOM 2 H1 SER A 107 21.658 64.259 25.980 1.00 0.00 H
TITLE Protein in water t= 0.00000H
REMARK THIS IS A SIMULATION BOXH
ATOM 1 N SER A 107 20.799 63.728 25.985 1.00 0.00 N
ATOM 2 H1 SER A 107 21.658 64.259 25.980 1.00 0.00 H
結果:
TITLE Protein in water t= 0.00000
REMARK THIS IS A SIMULATION BOX
ATOM 1 N SER A 107 20.799 63.728 25.985 1.00 0.00 N
TITLE Protein in water t= 0.00000H
REMARK THIS IS A SIMULATION BOXH
ATOM 1 N SER A 107 20.799 63.728 25.985 1.00 0.00 N
より直接的な sed 構文は次のとおりです。
sed '/^ATOM.*H$/d' input > output
これは次のように言います。
- (基本印刷ライン)
- ATOMで始まりHで終わる行を検索する
- この行を削除(印刷しない)