時には、表形式データに非常に迷惑な行があることがあります。
column name | other column name
-------------------------------
私は一般的に存在してはならないジャンク行を削除するために合理的に一意の文字列を渡すことを好みますgrep -v
が、このアプローチの問題は、合理的に一意の文字列が誤ってデータに表示される場合に深刻な問題であることです。
削除できる行数grep -v
(例:1)を制限する方法はありますか?ボーナスポイントの場合を使用せずに最後から行数を計算する方法はありますか<some command> | tac | grep -v <some stuff> | tac
?
ベストアンサー1
awk
最初のものを無視できますN一致する行(たとえば、ファイルから最初と2番目の項目のみを削除したい場合):
n=2
awk -v c=$n '/PATTERN/ && i++ < c {next};1' infile
最後のものは無視してくださいN一致する行:
awk -v c=${lasttoprint} '!(/PATTERN/ && NR > c)' infile
${lasttoprint}
ファイル内の最後に一致するth + 1行番号はどこにありますか?n
この行番号を取得する方法はいくつかあります。 (たとえば、sed
/ etcを使用して一致する各行番号を印刷してawk
抽出tail | head
します。)... 1つの方法は次のとおりですgnu awk
。
n=2
lasttoprint=$(gawk -v c=$((n+1)) '/PATTERN/{x[NR]};
END{asorti(x,z,"@ind_num_desc");{print z[c]}}' infile)