1

次のような構造のファイルがあります。

particle 1
0.1   0.988
0.2   0.975
0.2   0.945
0.3   0.900
...
...
particle 2
0.1   0.988
0.2   0.965
0.2   0.945
0.2   0.935
0.3   0.900
...

各パーティクルgrepの下での最初の発生のみを行うにはどうすればよいですか? 0.2たとえば、次のようなことがしgrepたい

particle 1
0.2 0.975
particle 2
0.2 0.965

前もって感謝します!!

4

4 に答える 4

6

この awk ワンライナーが役立ちます:

awk '/particle/{print;p=1}p&&/^0\.2/{print;p=0}' file

テストを追加します。

kent$  cat f
particle 1
0.1 0.988
0.2 0.975
0.2 0.945
0.3 0.900
.....
.....
particle 2
0.1 0.988
0.2 0.965
0.2 0.945
0.2 0.935
0.3 0.900

kent$  awk '/particle/{print;p=1}p&&/^0\.2/{print;p=0}' f
particle 1
0.2 0.975
particle 2
0.2 0.965
于 2013-09-24T20:14:50.447 に答える
0

grepはどうですか

grep -E '^partice|^.2' f
于 2013-09-24T22:45:04.747 に答える
0

その下に 0.2 がある場合にのみパーティクル ID を出力し、サンプル入力のパーティクル ID はプレースホルダーですが、実際のファイルでは数字以外で始まると仮定します。

$ cat file
particle 1
0.1   0.988
0.2   0.975
0.2   0.945
0.3   0.900
...
particle 2
0.1   0.988
0.3   0.900
0.4   0.900
...
particle 3
0.1   0.988
0.2   0.965
0.2   0.945
0.2   0.935
0.3   0.900
...

$ awk '/^[^[:digit:]]/{p=$0} p && ($1==0.2){ print p ORS $0; p="" }' file
particle 1
0.2   0.975
particle 3
0.2   0.965
于 2013-09-25T13:35:21.590 に答える
0

これはうまくいくかもしれません(GNU sed):

sed -r '/particle/b;/^0\.2/!d;:a;$!N;/^(0\.2\s).*\n\1/s/\n.*//;ta;P;D' file

行に含まれている場合は、particleそれを印刷します。行が始まらない場合は0.2削除します。2 行目が始まっている場合は削除し、0.2そうでない場合は最初の行を出力します。

于 2013-09-25T06:27:32.160 に答える