正規表現のシェルスクリプト(C)(awkは、並べ替え、uniqのツール)

正規表現のシェルスクリプト(C)

I.はじめに

前の二つの記事が物語のコンセプトに正規表現、基本的な正規表現と拡張正規表現の概念と役割を紹介し、また、導入シェル「三銃士」をグレップのと2つのコマンドをsedは、この記事では紹介します最後に、剣士の--awk。

また、ツールとuniqはソート・ツールを紹介します。

二、awkのツール

できない相互作用のLinux / Unixシステムでは、AWKは、行入力テキストが行を読み込む、編集するための強力なツールであり、出力フォーマットまたはコンテンツフィルタリング処理の要件を満たすために、指定されたパターンに基づいてマッチングを見つけるためにかなり複雑なテキスト操作を実施する場合には、広く自動化された、さまざまな構成タスクを完了するために、シェルスクリプトで使用されています。

一般的な使用法

awkのオプション「編集モードまたは条件付き命令{}」FILE1 FILE2

AWK -fスクリプトファイル1つのファイル2

sedコマンドは行全体を処理するために使用される、AWKは、処理ラインの後に複数のフィールド内に吸い込まれ、デフォルトフィールドセパレータは、ケースのスペースまたはTABキーです。

awkの実行結果は、フィールド機能を印刷する印刷データで表示することができます。論理演算子を使用することができますawkコマンドを使用して、「&&」を示している「と」、「||」を示している「または」手段「ではない」「!」;また、そのような+などの単純な数学演算を実行することができ、 - 、*、/、%、^、それぞれ加算、減算、乗算、除算、べき乗、および残りを取ります。

awkは組み込み変数(変更することはできませんが、直接使用することができます)いくつかの特殊が含まれています

FS:フィールド区切りテキスト、スペースやタブのデフォルトビット(TAB)の各ラインを指定します。

行の現在の処理のフィールドの数:NF

NR:現在処理(序)の行番号

治療の現在の行の内容:$ 0

$ N:現在のプロセスライン(第n列)のn番目のフィールド

FILENAME:ファイルの名前が処理されています

RS:区画データ記録、デフォルトの\ nはすなわち、各レコードの挙動

例について:

1)ユーザ名/ etc / passwdファイル、ユーザーID、グループID列を探します

[root@lokott ~]# awk -F: '{print $1,$3,$4}' /etc/passwd
root 0 0
bin 1 1
daemon 2 2
...//省略部分内容
[root@lokott ~]# awk -F: '{print $0}' /etc/passwd  //$0表示显示整个行,结果与cat 和sed -n 'p'等价
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
......//省略部分内容

2)OKを押して出力テキスト

[root@lokott ~]# awk '{print}' /etc/passwd   //等同于 awk '{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@lokott ~]# awk 'NR==1,NR==3{print}' /etc/passwd   //输出1-3的行内容,与下等同
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@lokott ~]# awk '(NR>=1)&&(NR<=3){print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@lokott ~]# awk '(NR==1)||(NR==3){print}' /etc/passwd  //输出第1和3行的内容
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@lokott ~]# nl /etc/passwd |awk 'NR%2==1{print}'  //输出奇数行内容
     1  root:x:0:0:root:/root:/bin/bash
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    ......//省略部分内容
[root@lokott ~]# nl /etc/passwd |awk 'NR%2==0{print}' //输出偶数行内容
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     8  halt:x:7:0:halt:/sbin:/sbin/halt

[root@lokott ~]# awk '/^root/{print}' /etc/passwd  //输出以root开头的行
root:x:0:0:root:/root:/bin/bash
[root@lokott ~]# awk '/bash$/{print}' /etc/passwd   //输出以bash结尾的行
root:x:0:0:root:/root:/bin/bash
lokott:x:1000:1000:lokott:/home/lokott:/bin/bash
lisi:x:1002:1002::/home/lisi:/bin/bash

[root@lokott ~]# awk 'BEGIN{x=0};/\/bin\/bash$/ {x++};END {print x}' /etc/passwd
3
[root@lokott ~]# grep -c "/bin/bash$" /etc/passwd
3
//统计以/bin/bash结尾的行的数量

3)を押して、出力テキスト・フィールド

[root@lokott ~]# sed 's/:/ /g' /etc/passwd|awk '{print $1,$3}'|tail -3
named 25
apache 48
lisi 1002
//将passwd文件中的所有:替换为空格后的内容到缓存中,然后使用awk命令输出每行的第一和第三个字段到管道中,最后输出最后三行到显示屏上,也可以在后面继续添加“|sort”继续排序

[root@lokott ~]# awk -F: '$2=="!!"{print}' /etc/shadow |tail -3
tcpdump:!!:18214::::::
named:!!:18220::::::
apache:!!:18228::::::
//输出密码为!!(没有密码的)的用户的shadow记录
[root@lokott ~]# awk -F: '$7~"/bash"{print $1}' /etc/passwd//输出第七个字段中包含/bash的行的第一个字段
root
lokott
lisi
[root@lokott ~]# awk '($1~"nfs")&&(NF==8){print $1,$2}' /etc/services 
nfs 2049/tcp                            //输出包含8个字段且第一个字段包含nfs的行的第1、2个字段
nfs 2049/udp
nfs 2049/sctp
netconfsoaphttp 832/tcp
netconfsoaphttp 832/udp
netconfsoapbeep 833/tcp
netconfsoapbeep 833/udp

パイプを通して4)、二重引用符呼び出しシェルコマンド

[root@lokott ~]# awk '/bash$/{print |"wc -l"}' /etc/passwd
3
//输出使用bash的用户个数

三、ソートとuniqのツールツール

並べ替え、uniqの、WC:Linuxシステム、ツールをソート一般的に使用されるファイルには、3つがあります。WCコマンドの章では、Linuxに説明し、一般統計のために、したがって、ここではそれらを繰り返すことはしません。ソートやツールおよび使用方法の使用に主にUNIQ。

1.sort

ソートソートするファイルの内容の単位のツールですが、それはまた、さまざまなデータ・タイプに応じて並べ替えることができます。

並べ替え[オプション]パラメータ:形式を使用して

オプション:

  • -f:ケースを無視します。
  • -b:各列の前のスペースを無視します。
  • -M:月で並べ替え。
  • -n:ソート数値。
  • -r:逆順序(共通)
  • -u:UNIQに相当する、単一のラインと同じデータを示します。
  • -t:指定の区切り文字、[Tab]キーデフォルトのパーティションを使用しました。
  • -o <出力ファイル>:指定されたダンプ・ファイルにソートされた結果、(共通)
  • -k:指定ソートエリア。

例:

[root@lokott ~]# sort /etc/passwd |nl       //依据字母排序正向
     1  abrt:x:173:173::/etc/abrt:/sbin/nologin
     2  adm:x:3:4:adm:/var/adm:/sbin/nologin
     3  apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
     4  avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
     5  bin:x:1:1:bin:/bin:/sbin/nologin
     ......//省略部分内容
[root@lokott ~]# sort -r /etc/passwd |nl   //依据字母排序反向
     1  usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
     2  tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
     3  tcpdump:x:72:72::/:/sbin/nologin
     4  systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
     5  sync:x:5:0:sync:/sbin:/bin/sync
     ......//省略部分内容
[root@lokott ~]# sort -t: -k 1 /etc/passwd  //根据:号将第一列进行正向排序
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:995:991::/var/lib/chrony:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
......//省略部分内容

[root@lokott ~]# sort -t: -k 1 /etc/passwd -o out.txt  //将上述结果输入到文件out.txt中
[root@lokott ~]# cat out.txt 
abrt:x:173:173::/etc/abrt:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
......//省略部分内容

2.uniq

uniqのツールは、多くの場合、報告のために、Linuxシステムでのsortコマンドと一緒に使用したり、ファイルの重複を無視します。

フォーマット:uniqの[オプション]のパラメータ

オプション:

-c:カウント

-d:唯一の重複行を表示します

-u:ディスプレイは、行のみに一度表示されます

例:

[root@lokott ~]# cat test.txt  //有空行
this is a test
this is a test
this is a test

hello
hello

world 

this is a test
this is a test
list
list

hostname
hostname

[root@lokott ~]# uniq test.txt   //删除互相连续的重复的行
this is a test

hello

world 

this is a test
list

hostname

[root@lokott ~]#uniq -c test.txt  //行前显示该行重复出现的此次数
      3 this is a test
      1 
      2 hello
      1 
      1 world 
      2 
      2 this is a test
      2 list
      1 
      2 hostname
      1 
[root@lokott ~]# uniq -d test.txt  //删除连续重复的重复行
this is a test
hello

this is a test
list
hostname

IVの概要

この記事では、使用AWK、ソートとuniqのツールの使用および方法は、例を挙げて説明したと説明しています。

おすすめ

転載: blog.51cto.com/14557673/2455796