2017-11-05 4 views
1

ファイルの出力を最初にgrepして、2つのパターンが一意の文字列(すなわちATOM、!)で始まり、別のパターン(PVAL、PLMS )このgrep行で印刷してください。例えばawkまたはsedを使用して2つのパターンの間に行を印刷します

ATOM 17 COMMENT CL01 
PRNT 16 
PVAL 7.243 SIGPV 0.038 
PLMS 1 1 -0.034 PLMS 3 1 -0.050 
PLMS 3 3 -0.063 PLMS 4 4 0.016 
! 
ATOM 17 COMMENT CL02 
NIEG 2 
PVAL 7.242 SIGPV 0.008 
PLMS 1 1 -0.046 PLMS 3 1 -0.011 
PLMS 3 3 0.072 PLMS 4 4 0.019 
! 
ATOM 9 COMMENT F01 
NEIG 4 
EXCEPT OH 
PVAL 7.185 SIGPV 0.031 
PLMS 1 1 -0.064 PLMS 2 -2 0.005 
PLMS 3 1 -0.011 PLMS 4 2 -0.006 
PLMS 4 4 0.006 
! 

について予想O/Pは

ATOM 17 COMMENT CL01 PVAL 7.243 SIGPV 0.038 PLMS 1 1 -0.034 PLMS 3 1 -0.050 PLMS 3 3 -0.063 PLMS 4 4 0.016 

ATOM 17 COMMENT CL02 PVAL 7.242 SIGPV 0.008 PLMS 1 1 -0.046 PLMS 3 1 -0.011 PLMS 3 3 0.072 PLMS 4 4 0.019 

ATOM 9 COMMENT F01 PVAL 7.185 SIGPV 0.031 PLMS 1 1 -0.064 PLMS 2 -2 0.005 PLMS 3 1 -0.011 PLMS 4 2 -0.006 PLMS 4 4 0.006 

任意の提案があまり理解されなければなりません。

+2

プレフィックスあなたのコード/データ。 [edit-help](http://stackoverflow.com/editing-help)を見てください。 – Cyrus

答えて

1

awkのソリューション:

awk '/^ATOM/{ f=1; r=$0 }/^!/{ print r; f=0 }f && ($1~/^(PVAL|PLMS)/){ r=r OFS $0 }' file 

出力:

ATOM 17 COMMENT CL01 PVAL 7.243 SIGPV 0.038 PLMS 1 1 -0.034 PLMS 3 1 -0.050 PLMS 3 3 -0.063 PLMS 4 4 0.016 
ATOM 17 COMMENT CL02 PVAL 7.242 SIGPV 0.008 PLMS 1 1 -0.046 PLMS 3 1 -0.011 PLMS 3 3 0.072 PLMS 4 4 0.019 
ATOM 9 COMMENT F01 PVAL 7.185 SIGPV 0.031 PLMS 1 1 -0.064 PLMS 2 -2 0.005 PLMS 3 1 -0.011 PLMS 4 2 -0.006 PLMS 4 4 0.006 
+0

ありがとう、あなたは私の一日を作った! – user31735

+2

@ user31735 [私の質問に誰かが答えたときに私はどうしたらいいですか?](https://stackoverflow.com/help/someone-answers) – SLePort

+0

ありがとう、今私はやるべきことをしました。 – user31735

2

あなたの本当の入力ファイルは、あなたが投稿したものと同じである場合は、1つは、所望の出力を与えることができたとしても下回ります。

# either 
awk 'f=/ATOM|PVAL|PLMS|!/{ORS=/^!/?RS:OFS; if(/^!/)$1=""}f' infile 

# or 
awk 'f=/ATOM|PVAL|PLMS/{ORS=OFS}!f && f=/!/{ORS=RS; $1=""}f' infile 

入力:

$ cat infile 
ATOM 17 COMMENT CL01 
PRNT 16 
PVAL 7.243 SIGPV 0.038 
PLMS 1 1 -0.034 PLMS 3 1 -0.050 
PLMS 3 3 -0.063 PLMS 4 4 0.016 
! 
ATOM 17 COMMENT CL02 
NIEG 2 
PVAL 7.242 SIGPV 0.008 
PLMS 1 1 -0.046 PLMS 3 1 -0.011 
PLMS 3 3 0.072 PLMS 4 4 0.019 
! 
ATOM 9 COMMENT F01 
NEIG 4 
EXCEPT OH 
PVAL 7.185 SIGPV 0.031 
PLMS 1 1 -0.064 PLMS 2 -2 0.005 
PLMS 3 1 -0.011 PLMS 4 2 -0.006 
PLMS 4 4 0.006 
! 

出力-1:

$ awk 'f=/ATOM|PVAL|PLMS|!/{ORS=/^!/?RS:OFS; if(/^!/)$1=""}f' infile 
ATOM 17 COMMENT CL01 PVAL 7.243 SIGPV 0.038 PLMS 1 1 -0.034 PLMS 3 1 -0.050 PLMS 3 3 -0.063 PLMS 4 4 0.016 
ATOM 17 COMMENT CL02 PVAL 7.242 SIGPV 0.008 PLMS 1 1 -0.046 PLMS 3 1 -0.011 PLMS 3 3 0.072 PLMS 4 4 0.019 
ATOM 9 COMMENT F01 PVAL 7.185 SIGPV 0.031 PLMS 1 1 -0.064 PLMS 2 -2 0.005 PLMS 3 1 -0.011 PLMS 4 2 -0.006 PLMS 4 4 0.006 

出力-2:4つの空白と

$ awk 'f=/ATOM|PVAL|PLMS/{ORS=OFS}!f && f=/!/{ORS=RS; $1=""}f' infile 
ATOM 17 COMMENT CL01 PVAL 7.243 SIGPV 0.038 PLMS 1 1 -0.034 PLMS 3 1 -0.050 PLMS 3 3 -0.063 PLMS 4 4 0.016 
ATOM 17 COMMENT CL02 PVAL 7.242 SIGPV 0.008 PLMS 1 1 -0.046 PLMS 3 1 -0.011 PLMS 3 3 0.072 PLMS 4 4 0.019 
ATOM 9 COMMENT F01 PVAL 7.185 SIGPV 0.031 PLMS 1 1 -0.064 PLMS 2 -2 0.005 PLMS 3 1 -0.011 PLMS 4 2 -0.006 PLMS 4 4 0.006 
関連する問題