[それを言うために、それを明確に!Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール

内容:
(IX)マージ二つのファイル
NFS上の権限を設定する(X)
の(XI)の交点
(XII)の統計情報を表示される文字の数
(XIII)の和
(XIV)実際のケース


(×)、マージ二つのファイル
(9.1)まず、システムのA1とA2の2つのファイルを定義し、そして今、私たちは同じであれば、その後、2番目のフィールドよりも、A1とA2の2番目のフィールドを使用する必要があります第3のフィールドに第1フィールドのA1ファイルが複数配列検討するために組み合わせることができれば、最終的にテンプレートとしてファイルに対応する情報を出力するファイルA2、A2を添加する
#AWK -F「を、[、]」 「NR == FNR {[$ 2] = $ 1} NR!= FNR {$ 0、印刷[$ 2]}「A1 A2
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
(9.2)我々は2つのファイルB1とB2を作成し、そして今、私たちは次のように二つのファイルにしたいですフォーマット、我々は2行1列B2を見つけ、B1はNR FNRがフィールド間で使用することを忘れない、印刷動作するときに、我々は時ではなく、一般的な項目である「:」コロンで区切ら。
我々は印刷したいの結果は次のとおりです。
トム:001:AA
トム:001:BB
ボブ:002:CC
ボブ:002:DD
#awkの-F :!「NR == FNR {A [$ 2] = $ 0} NR = FNR { [$ 1]印刷":" $ 2}「のB1 B2
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
(9.3)C1 $ 1と$ 3のC2、最後の3文字C1と同じ、$ 2、C2は$ 4の場合、我々は、C1、C1とC2のファイル、同じを作成C2同じ$ 3 $ 6需要は、我々は複数の列を比較するのに合流入れている限り、より一般的なスクリーニングの列であれば、印刷の行を予選で、その後C2。私たちは、1列C1に加え、最初の3プラスC2ファイルプラス3の6つのプラス3文字の最初の4つの後の最初の2、それが同じであれば、それは需要に沿ったものである、C2できることを見出し印刷された現在の行にあるファイル。
#awkのNR == FNR { [$ 1] = $ 1 $ 2 $ 3} NR = FNR {X = SUBSTR($ 4,3);! Y = $ 3X $ 6と、IF(Y == [$ 3]){プリント} } '
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
(9.4)は、私たちは、ファイル名を使用しているとき、我々はD1をD2との最初の最初の注意を払うが、その後使用しなければならない、我々は2番目のフィールドd1のファイルに2つ目のフィールドにファイルを置き換えたい、この時点でファイルD1およびD2、D2を作成します結腸を、次いで第2のフィールドのファイルに第2の文書D2フィールドD1に置換操作を実行します。「」区切り文字の入力と出力を指定します。
#Awkの-F: 'BEGIN {FS = OFS = ":"}!NR == FNR {[$ 1] = $ 2} = NR FNR {$ 2 = [$ 1];}印刷' D2 D1
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール


単一ラインと同じ行に(X)
我々はテキストファイルAA1を作成する(10.1)、我々は今必要が行のフィールドの同じ行のファイルをマージすることで、例えば、第1フィールドの最初の行は、第二の、27でありますライン27は、最初のフィールドであり、次の3つのフィールドの最初の行のダイレクト印刷位置の第2フィールドの2行目の情報は、第三の行の最初のフィールドが26であるので、次の行は、直接印刷します前後。NRは、現在の行であり、第1フィールドの最初の印刷ラインを変数xに割り当てられている場合、NRの使用が1に等しいことは、決定された第一、第2行、NRが1に等しくないことがわかったが、第二列フィールドがそうprintf関数を使用して、この時間を印刷「%s」の形式で、変数xの値に等しく、その後、第三列を扱う、我々はその「($ 1!=であれば、他に沿って見つけ X)」 、この条件我々が最初になります。この時ので改行文字を印刷「\ n」は、その後、行全体を印刷して、我々は我々が必要とする基本的なフォーマットを実現できるように、変数xにフィールドの現在の行を割り当てます。
#awkのNR == 1 {printfの "%s"は、$ 0; X = $ 1}!(!$ 1 = X)NR = 1 {IF($ 1 == X){printfの"%s"は、$ 2}そうであれば{ printfの"\ n%s"は、 $ 0; X = $ 1}} END {printfの"\ n"}「AA1
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール


(十一)求交集
(11.1)现在我们创建了两个文件a1和a2,现在要求打印a1文件中的一些行,a1的第2字段出现在a2的第1个字段中,现在如果要求a的某部分是否出现在b的某部分里的时候,那么我们就把b的那部分设置为数组的下标,然后判断a的那部分是否是下标的一个元素。此时则应该为“awk -F”[,/]” ‘’ a2 a1”
# awk -F"[,/]" 'NR==FNR{a[$1]=$0}NR!=FNR{if($2 in a){print $0}}' a2 a1
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
(11.2)现在我们创建两个文件b1和b2,现在我们的需求是打印b1的一些行,b1的$1出现在b2的第1个字段里,找到那些行之后,并把b2里对应的这些行的$2部分进行求和,我们可以先在b2文件中将所有的第1字段的第2个字段值进行相加操作,最后在b1文件行打印出来时也把相加的值一同打印出来。
# awk -F, 'NR==FNR{a[$1]+=$2}NR!=FNR{if($1 in a){printf "%s,%f\n",$0,a[$1]}}' b2 b1
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール


(十二)统计字符出现的次数
(12.1)我们有一个文件a1,现在我们需要统计每个字符在文本文件中出现的次数,此时我们的思路是遇到一个字段就将其设置为一个元素的下标,当我们已经定义了一个元素时,如果下次再遇到这个下标的元素的时候,则加上1次。我们首先是使用循环遍历每一行,使用遍历的字段作为数组的下标,如果后面出现了相同的字段,则将统计的结果加1,然后在END中去遍历数组中每个元素当前的数值,此时就可以得到每个字符在文本文件中出现的次数。
# awk '{for(i=1;i<=NF;i++){a[$i]++}}END{for(x in a){print x"一共出现了"a[x]"次"}}' a1
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール


(十三)求和
(13.1)在我们的内存中正常是会将内存的数据写入到硬盘中的,因此内存的数据和硬盘的数据是同步的,我们称之为干净数据,但是有时候在我们的内存中有些数据修改完后并没有写入到硬盘中去,内存中的数据和硬盘数据并不同步,此时这类数据我们称之为脏数据,如果脏数据没有及时写入到硬盘,那么当计算机重启之后没有写入到硬盘的数据就会丢失了。现在我们的需求是计算出某个进程一共有多少个干净页,有多少个脏页,我们是可以从/proc/1/smaps的系统映射文件中查看到我们所需的内存相关信息的,我们可以使用模式匹配的方式,将干净页和脏页分别进行统计,在之前的基础上进行连加操作。
# cat /proc/1/smaps
# cat /proc/1/smaps | awk '/Shared_Clean/{AA+=$2}/Shared_Dirty/{BB+=$2}END{print "干净页总合是"AA"KB";print "脏页的总合是"BB"KB"}'
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
(13.2)现在我们有两个文件a1和a2,因为我们发现a1文件和a2文件的列数是一样的,所以现在我们的需求是希望将a1文件和a2文件中对应的列数进行相加得到一个相加后的一行数组。解决这个问题的思路我们是把一个文件里所有的数字放在一个数组里保存,然后读取第二个文件,把第二个文件里所有的数组保存,然后分别相加(图13-5)。当然我们也可以使用getline函数解决问题,首先使用for循环获取a1文件的所有值,然后使用getline读取a2文件读取的行替换到当前所在行的信息,最后使用for循环去遍历数组a与当前a2文件中的每个字段,并进行相加的操作,此时也可以得到我们所需的结果(图)。
#AWK「NR == FNR {ための(iは= 1; I <= NF; I ++){[I] = $ I}}!{NR = FNR {(I ++; I <= NF I = 1の)のためにB [i]は= $ I;のprintf "%s"は、[I] + B [I]}} END {printfの"\ n"} 'A1、A2
#AWK' {(I = 1のため、I <= NF ; I ++){[I] = $ I};のgetline < "A2"; I <= NF; I ++){printfの"%s"は、[I] + $ I}のprintf「\(I = 1のためのN "}」A1
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール


(XIV)実際のケース
(14.1)達成カードのIP
#ifconfigコマンド| grepの'INET' | grepを放送|のawk '{$ 2印刷}'
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
(14.2)システムメモリのサイズに作られた
#猫の/ proc / meminfoの|のawk 「/ MemTotal / 印刷$} 2 { '
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
(14.3)CSVファイルのフィールドの順序を変更するには、我々は、システム内のファイルを作成するdata.csvは、第2のフィールドと第四のフィールドを交換することを望んでいます。
#猫data.csv | AWKの-Fは、 ' BEGIN {OFS = ""}、{$ 1、$ 4 $ 3 $ 2、$ 5、$ 6 $ 7印刷}'
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール
[それを言うために、それを明確に! Linuxの]従業員のために不可欠なツール(2) - 戦闘にAWKのテキスト処理ツール

------この記事を締結、読んでくれてありがとう------

おすすめ

転載: blog.51cto.com/13613726/2460753