ファイルから2行目をすべて削除する方法は?

ファイルから2行目をすべて削除する方法は?

文書:

Data inserted into table. Total count 13
No error occurred
Data inserted into table. Total count 45
No error occurred
Data inserted into table. Total count 14
No error occurred
Data inserted into table. Total count 90
No error occurred

期待される出力ファイル:

Data inserted into table. Total count 13
Data inserted into table. Total count 45
Data inserted into table. Total count 14
Data inserted into table. Total count 90

私は出力が次のようになりたいです。他のすべての行は削除されますが、行間にギャップはありません。

答え1

行を1つずつ削除してこの問題を解決すると、エラーが発生しやすくなります(たとえば、プロセスが1つではなく2つの行を作成する場合など)。多分ジャンクをフィルタリングする方が良いかもしれません。

grep -v "No error occurred" file

これは、より多くのジャンクパターンを追加し、結果を改善するためのフィルタとして機能します。

答え2

そしてsed

sed -e n\;d <file

POSIXの使用awk:

awk 'FNR%2' <file

年齢が多い場合awk(たとえばoawk)、次のものが必要です。

oawk 'NR%2 == 1' <file

そしてex

$ ex file <<\EX
:g/$/+d
:wq!
EX

ファイルはその場で編集されます。

  • gグローバルコマンドの表示
  • /$/すべての行に一致
  • +d次の行を削除
  • wq!すべての変更を保存

この方法は方法と同じで、sed現在の行の1行から始まり、次の行をすべて削除します。

そしてperl

perl -ne 'print if $. % 2' <file

そしてraku

raku -ne '.say if $*IN.ins % 2' <file
raku -ne '.say if ++$ % 2' <file

編集する

IO::Handle.insが削除された日付今回提出してください

答え3

この質問によると、GNUは次のようになりますsed

sed '0~2d' file

他のすべての行は削除されますが、コンテンツごとにフィルタリングされた行を提供したいと思います。

sed '/Data/! d' file

または同じ結果

sed '/No error/d' file

答え4

もう一つの答えは、vi / vimを使用できるということです!

qdjddq

次に、ファイルに500行がある場合(たとえば)、次のように入力します。

250@日

その後、型を作成して終了します。

:X

または問題が発生して保存したくない場合:

:キュー!

説明する:

q      #Start Recording
 d     #Put the recording into register 'd'
  j    #Move the cursor down
   dd  #Delete the line
     q #Stop recording


250    #Number of repeats
   @d  #Playback the recording in register 'd'.

関連情報