1

出力ファイルのセットがあり、いくつかは以下のとおりです。

133 0.00295 nurse merit respect muslim 
134 0.00292 high dangerous reassure full 
135 0.00048 
136 0.0039  experience darren  
137 0.00097 _ _param_ui_control_scripts_save _param_pattern_value 
138 0.00292 find director

そして、次のファイルを取得したい:

133 0.00295 nurse merit respect muslim 
134 0.00292 high dangerous reassure full 
136 0.0039  experience darren  
137 0.00097 _ _param_ui_control_scripts_save _param_pattern_value 
138 0.00292 find director

2 番目の列の後に何もない場合は、その特定の行を削除したいだけです。どうすればこれを行うことができますか?私はシェルスクリプトを初めて使用しますか?

おそらくこのコマンドの変更? sed '/^$/d'

4

2 に答える 2

6

列がスペースで区切られている場合、行に 2 つ以上のフィールドがあることを確認するのはどうでしょうか? この値を保存するのでNF、次のように簡単に言えます。

awk 'NF>2' file

指定された入力に対して、次を返します。

133 0.00295 nurse merit respect muslim 
134 0.00292 high dangerous reassure full 
136 0.0039  experience darren  
137 0.00097 _ _param_ui_control_scripts_save _param_pattern_value 
138 0.00292 find director
于 2015-11-17T11:45:05.927 に答える
1

楽しみのためにsed、OPが最初から使用し、削除する行を選択するときにログファイルの正確なレイアウトが影響する可能性がある場合に備えて、ソリューションのフォーマットを詳細に保ちました。ここで、正規表現は、行の先頭、0 個以上の数字、スペース、0 個以上の数字、リテラルのピリオド、0 個以上の数字、0 個以上のスペース、そして末尾を探します。行を削除し、それらを削除します。

sed '/^[0-9]* [0-9]*\.[0-9]* *$/d' x.log > x_modded.log

興味深いことに、私のバージョンの Ubuntu の bash では、省略形の \d を数字に使用できず、プラス記号を 1 つ以上の数字に使用できませんでした。更新を行う時が来たようです。:-/

于 2015-11-17T16:43:04.850 に答える