2016-05-06 6 views
0

"次の行がパターンに一致しない場合にのみパターンに一致する行を印刷します"ソリューション述べたが、私はちょうど私が次の行の現在の行と同じパターンで始まるあまりにもファイル内のすべての行を印刷したい場合は、上記のコマンドを変更する方法を知りたいと思ったawk:次の行も同じパターンで始まる場合のみ、パターンで始まる行を表示します。

awk 'a=/^O/{x=$0} !a&&x{print x;x=0;}' myfile 

です。

例えば

ファイルのテキストが含まれています

abc this is a line 
def 
abc this is line 2 
ghi 
abc this is line 3 
abc this is line 4 
jkl 
mno 
abc this is line 5 
jkl 
abc this is line 6 
abc this is line 9 
jkl 

コマンドは、以下の行が印刷されなければならないようなものであるべきである:

abc this is line 3 
abc this is line 6 

任意の助けいただければ幸いです。

お手数をおかけしていただきありがとうございます。以下のような要件を満たすためにオリジナルの質問を編集すると、複数の類似した行がある場合は役に立ちません。

次の行が異なるパターンで終わるようにファイル内のすべての行が印刷される場合、awkコマンドは何になりますか?

例えば:どのように私は、学生が合格していない生徒名を持つすべての行を印刷するようにawkを使用することができます

Student name is A 
Student name is B 
Student name is C 
result for C is pass 
Student name is D 
result for D is pass 
Student name is E 
result for E is pass 
Student name is F 
result for F is pass 
Student name is G 
result for G is pass 
Student name is H 
Student name is I 
result for I is pass 

:ファイルが含まれている場合。 だから、上記の例のために印刷された線は、次のようになります。

Student name is A 
Student name is B 
Student name is H 

は、私は彼らの次の行にはawkを使用して、文字列PASSで終了していない学生で始まるすべての行を印刷できますか?

+0

3つ以上の連続する行がこのパターンで始まる場合はどうなりますか? –

+0

あなたはこれを後ろ向きに考えています。あなたがトランプを転がしているときに、あなたが次のカードをまだ見ていないので、次のカードがエースになるかどうかに基づいて、その時点で何かをするのは難しいです。一方、エースを裏返すと、前のカードがすでに見たことがあるので、あなたの前のカードが王だったら、何かをするのはとても簡単です。同じ2枚のカードを同じ順序で使用していますが、それについて考えてみると、難しい解決方法と簡単な解決方法が異なって表示されます。あなたが以前に来たものに基づいてそれを行うことができれば、次に来るものに基づいて物事をしようとしないでください。 –

答えて

5

EDIT

更新要件について:

私は彼らの次の行にはawkを使用して、文字列PASSで終了していない学生で始まるすべての行を印刷できますか?

$ awk '$NF != "pass" && p0 {print p0} {p0 = ($1 == "Student") ? $0 : ""}' sw.txt 
Student name is A 
Student name is B 
Student name is H 

印刷次のラインも現在の行と同じパターンで始まるファイル内のすべての行。

$ awk '$1 == p1 {print p0} {p1 = $1; p0 = $0}' sw.txt 
abc this is line 3 
abc this is line 6 

現在の最初のフィールドは、文字通り、前の行の、私たちは前の行を印刷していることと一致した場合。

(あなたの質問は、同じ "パターン"で始まる行を参照していますが、サンプルの入力と出力に基づいて、私は単純な文字列のマッチングを意味し、正規表現は "パターン通常はawkの文脈で参照されます。)

+0

おそらくこれはパターンマッチではなく、リテラルマッチ(等価)であることに注意してください。質問もあいまいです。 – karakfa

+0

良い点@karakfaは、明確になります。 – jas

+0

これは、入力ファイルの最初の行が空白であるか、または2行目の値に関係なく数値が0に評価される値で開始された場合、最初の空白行を出力します。 @ codecrazy46 - また、文字列または数値または正規表現の比較を常に必要とするかどうかを明確にしてください。ある値に対しては文字列一致を、他の値には文字列一致(つまり '0' == '0.00'など)を取得します。 'string'や' regexp'(またはこの場合は 'numeric')を使用し、完全一致または部分一致(' abcde'を行います)を使用する必要があります。 「abc」にマッチする?) –

関連する問題