awkは時間ごとの合計と変数が必要です。

awkは時間ごとの合計と変数が必要です。

実行でき、うまくいきました。注:$ 1フィールドは、時間/日付スタンプが付けられたフィールドです。

gawk -F ":" "{ print $1 }" /cygdrive/c/counting/ourlog | sort | uniq -c | sort -r
  57339 2014-03-21 09
  54290 2014-03-21 08
  54036 2014-03-21 10
  53254 2014-03-21 11
  52777 2014-03-21 12
  50785 2014-03-21 07
  49729 2014-03-21 16
  44459 2014-03-21 15
  43932 2014-03-21 13
  43335 2014-03-21 06
  40952 2014-03-21 14
  40864 2014-03-21 17

今私が望むのは、最初の10行(#の前にコメントがある)を隠すことです。これは異なる場合があります。したがって、#で始まる最初のxx行を見つけようとしています。

スクリプトを次のように変更します。

gawk -F ":" "{ print $1 }" /cygdrive/c/counting/ourlog | sort | uniq -c | sort -r | gawk -v MyID="$id" '/#/{n++}; END {print n+0}' | gawk "NR> MyID "

しかし、これはうまくいきません。いくつかをさらに変更すると、希望の結果が得られます。

gawk -F ":" "{ print $1 }" /cygdrive/c/counting/ourlog | gawk "NR>10" | sort | uniq -c | sort -r

実際、10を入力して最初の10行または20行をスキップできることを知っています。しかし、私はこれが計算された値であることを願っています。

ベストアンサー1

次のawkコードは最初のコメントだけをスキップし、print $1残りの行はスキップします。

gawk -F: -v c=1 '/^[^#]/ {c=0} c==0 { print $1 }' ourlog

プログラムが開始される前に、この変数はc1に設定されます。コメント以外の行が見つかると、この変数はcゼロに設定され、残りの実行中はそのまま残ります。この時点でc==0print文が実行されます。

すべてのコメントを削除したい場合は、コードははるかに簡単です。

gawk -F: '/^[^#]/ { print $1 }' ourlog

上記のコードは、正規表現と比較して各行をチェックし、^[^#]最初の文字ではない場合にのみ一致します#。一致するもの(コメントではなく行)がある場合は、printステートメントが実行されます。

おすすめ記事