sedとawkの一般的な方法

4817 ワード

sedとawkは比較的基礎的なクラスUnixシステムでテキストを一括処理する良いものである.sedは行の編集を担当し,awkは列の編集を担当する.ここではこの方面の知識について少しお話しします.理解しなければならないのは、彼らの処理が行に従って行われていることだ.
sed
コマンドフォーマット
sed [options] 'command' file(s)  
sed [options] -f scriptfile file(s)  

基本的なコマンドフォーマット:
[address[,address]][!]command[agruments]

オプション
オプション
意味
-n
サイレントモード
-e
複数の編集命令を入力
-i
are neat
-f
ブートsedスクリプトファイル名.
共通コマンド
オプション
意味
a
追加
d
削除コマンド
s
置換コマンド、正規の置換をサポート
i
挿入
p
出力、通常-nとともに使用
c
アドレスを直接置換
r
[address]r file、ファイル内容をaddress位置に挿入
w
[address]w file、address位置内容をファイルに書き込む
sedインスタンス
リファレンス
awk
コマンドフォーマット
awk [-F  field-separator]  'commands'  input-file(s)

最も基本的な使い方
$ ps aux | awk '{print $2}'

これにより、現在実行中のプロセスの番号が印刷されます.最初の最後に自分の印刷を追加したい場合は
$ ps aux | awk 'BEGIN {print "this is head"} {print $2} END {print "this is tail"}'

awkに組み込まれた変数
変数#ヘンスウ#
意味
ARGC
コマンドラインパラメータ個数
ARGV
コマンドラインパラメータの配置
ENVIRON
キュー内のシステム環境変数の使用をサポート
FILENAME
awkブラウズのファイル名
FNR
ブラウズファイルのレコード数
FS
コマンドライン-Fオプションと同等の入力フィールド区切り記号を設定します.
NF
ブラウズレコードのドメイン数
NR
読み取り済みレコード数
OFS
ドメイン区切り文字の出力
ORS
出力レコード区切り
RS
コントロールレコードセパレータ
最後の例で引き分け値を計算する際にNRを用いた.
printf構文
awk  -F ':'  '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s
",FILENAME,NR,NF,$0)}'
/etc/passwd

awk演算子
テキストを処理するときに簡単な演算をすることができます.
演算子
= += -= =/= %= ^= *=
ろんり
論理か&&論理と~~!正規表現と不一致正規表現<=>>=!==関係演算子
数学計算
  • プラス、
  • マイナス
  • /&乗、除与求余
  • ! 1元加算、減算論理非^*べき乗++–接頭辞または接尾辞として
  • 増加または減少

    ≪インスタンス|Instance|emdw≫
    最大値、合計値、平均値の計算
    参考awkで実行するには2つのユニットに分けられ、各行の処理は前のカッコで実行されます.ENDの後の{}の内容は
    $ cat test.log
    0 0 147.086
    0 10 141.269
    0 20 10000
    0 30 2805.22
    0 40 152.003
    0 50 144.762
    0 60 144.926

    最大値
    cat test.log | awk '{if(m
    {
      if(m<$3) m=$3
    }
    END {
      print m
    }

    合計
    cat test.log | awk '{m+=$3} END{print m}'
    {
      m+=$3
    }
    END {
      print m;
    }

    へいきんち
    cat test.log | awk '{m+=$3} END{print m}'
    {
      m+=$3
    }
    END {
      print m/NR;
    }