GNU/Linux >> Linux の 問題 >  >> Linux

パターンに一致する連続する行のすべてのシーケンスの最初の行だけを保持しますか?

2つ以上の連続する行に特定のパターンが含まれている場合は、一致するすべての行を削除し、最初の行だけを残します。

以下の例では、2つ以上の連続する行に「論理IO」が含まれている場合、一致するすべての行を削除する必要がありますが、最初の行は保持します。

入力ファイル:

select * from test1 where 1=1
testing logical IO 24
select * from test2 where condition=4
parsing logical IO 45
testing logical IO 500
handling logical IO 49
select * from test5 where 1=1
testing logical IO 24
select * from test5 where condition=78
parsing logical IO 346
testing logical IO 12

出力ファイル:

select * from test1 where 1=1
testing logical IO 24
select * from test2 where condition=4
parsing logical IO 45
select * from test5 where 1=1
testing logical IO 24
select * from test5 where condition=78
parsing logical IO 346

承認された回答:

awkを使用する :

awk '/logical IO/ {if (!seen) {print; seen=1}; next}; {print; seen=0}' file.txt 
  • /logical IO/ {if (!seen) {print; seen=1}; next} 行にlogical IOが含まれているかどうかを確認します 、見つかった場合、変数seen falseです。つまり、前の行にlogical IOが含まれていません 、次に行を印刷し、seen=1を設定します 次の行に移動します。それ以外の場合は、前の行にlogical IOがあるため、次の行に移動します。

  • その他の行については、{print; seen=0} 、行とセットseen=0を出力します

例:

$ cat file.txt 
select * from test1 where 1=1
testing logical IO 24
select * from test2 where condition=4
parsing logical IO 45
testing logical IO 500
select * from test5 where 1=1
testing logical IO 24
select * from test5 where condition=78
parsing logical IO 346
parsing logical IO 346
testing logical IO 12

$ awk '/logical IO/ {if (!seen) {print; seen=1}; next}; {print; seen=0}' file.txt 
select * from test1 where 1=1
testing logical IO 24
select * from test2 where condition=4
parsing logical IO 45
select * from test5 where 1=1
testing logical IO 24
select * from test5 where condition=78
parsing logical IO 346

Linux
  1. マッチングパターンの後にラインの一部のみを返しますか?

  2. Linuxの「cat」コマンドを使用して、特定の行のみを番号で表示するにはどうすればよいですか。

  3. パターンに一致する行を別のファイルの行に順番に置き換えますか?

  1. 最初の行を除いて、ファイルから余分なヘッダー行を削除しますか?

  2. 1つのフィールドに重複する値があるCsvの連続する行を削除しますが、最後の行は保持しますか?

  3. Grepのみを使用して最初のオカレンスのみを検索しますか?

  1. 端子出力から必要な回線のみを取得するにはどうすればよいですか?

  2. ファイルを分割し、各部分の最初の行を保持する方法は?

  3. Linux コマンド出力の最初の行を省略する