た後、私はラインの形式は、私はコマンドラインの一部を取得するグレップ
を使用aNumber timestamp commandInformation
である私は、特定の部分を抽出する必要があり、そこから私のUNIXサーバー上の巨大なファイル
を持っています
grep LATENCY file.log | grep CMDTYPE=NEW
私が望む特定の行を除外します。私は部分タイムスタンプと、行からの最後の9文字を返すだけで、完全な行ではない。どうやってやるの?
た後、私はラインの形式は、私はコマンドラインの一部を取得するグレップ
を使用aNumber timestamp commandInformation
である私は、特定の部分を抽出する必要があり、そこから私のUNIXサーバー上の巨大なファイル
を持っています
grep LATENCY file.log | grep CMDTYPE=NEW
私が望む特定の行を除外します。私は部分タイムスタンプと、行からの最後の9文字を返すだけで、完全な行ではない。どうやってやるの?
使用awk(1)
:
awk ' { print $2" "substr($0,length($0)-8) }'
次のようにあなたがawk
を使用することはできません。
grep LATENCY file.log | grep CMDTYPE=NEW | awk '{print $2,substr($0,length($0)-9,9)}'
は$ 0使用しないでしょうあなたが最後に表示し確認してください3番目の単語の終わりの代わりに行の? –
@ヤニック:はい、私は 'commandInformation'が単なる1ワードにすぎないとは思わなかった。ありがとうございました! –
のgrepを使用する必要が、awkは、同様のことを行うことができます。
awk '/LATENCY/ && /CMDTYPE=NEW/ {print $2 " " substr($0, length($0)-8)}' file
を私は」私はここでawkよりも良い選択肢だと主張するつもりです:
perl -ne 'next if ! (/LATENCY|CMDTYPE=NEW/ && /^\d+.*\s+(.*)\s+.*(.{9})$/); print "$2 $3\n";'
正規表現はより堅牢で、厳密なパターンと一致しない行を省略することができます。上記のawkスクリプトは、substr呼び出しのオーバーフローを見るつもりです(ログの終わりから部分行のように壊れた入力を入力すると、正直言って、負のインデックスがawkで何をするのかわかりません)。あなたが一人でSEDですべてを行うことができ
:
$ echo "234432 12:44:22.432095 LATENCY blah CMDTYPE=NEW foo bar 123456789" | \ sed -n '/LATENCY/!b;/CMDTYPE=NEW/!b;s/^.\+\s\+\([0-9:.]\+\)\s.\+\(.........\)$/\1 \2/; p' 12:44:22.432095 123456789
cut
は私よりも高速であるために
grep something somewhere | grep againsomething | cut -f2 -d' '
+1仕事をする必要があります:) –