天天看點

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

一、ls -l | grep ^d 

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具
linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

二、shell強大的awk  檔案搜尋分析刷選工具

參考:https://www.cnblogs.com/chenhuan001/p/6297615.html

1、 awk '{pattern + action}' {filenames} pattern查找的内容 action指令 filenames要查找的對象

盡管操作可能會很複雜,但文法總是這樣,其中 pattern 表示 AWK 在資料中查找的内容,而 action 是在找到比對内容時所執行的一系列指令。花括号({})不需要在程式中始終出現,但它們用于根據特定的模式對一系列指令進行分組。 pattern就是要表示的正規表達式,用斜杠括起來。

awk語言的最基本功能是在檔案或者字元串中基于指定規則浏覽和抽取資訊,awk抽取資訊後,才能進行其他文本操作。完整的awk腳本通常用來格式化文本檔案中的資訊。

通常,awk是以檔案的一行為處理機關的。awk每接收檔案的一行,然後執行相應的指令,來處理文本。

有三種方式調用awk

  1.   .指令行方式
  2.   awk [-F field-separator] 'commands' input- file(s)
  3.   其中,commands 是真正awk指令,[-F域分隔符]是可選的。 input- file(s) 是待處理的檔案。
  4.   在awk中,檔案的每一行中,由域分隔符分開的每一項稱為一個域。通常,在不指名-F域分隔符的情況下,預設的域分隔符是空格。
  5.   .shell腳本方式
  6.   将所有的awk指令插入一個檔案,并使awk程式可執行,然後awk指令解釋器作為腳本的首行,一遍通過鍵入腳本名稱來調用。
  7.   相當于shell腳本首行的:#!/bin/sh
  8.   可以換成:#!/bin/awk
  9.   .将所有的awk指令插入一個單獨檔案,然後調用:
  10.   awk -f awk-script- file input- file(s)
  11.   其中,-f選項加載awk-script- file中的awk腳本,input- file(s)跟上面的是一樣的。

執行個體:

顯示/etc/passwd的賬戶

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

2、#cat /etc/passwd |awk  -F ':'  '{print $1}'   awk工作流程

awk工作流程是這樣的:讀入有'\n'換行符分割的一條記錄,然後将記錄按指定的  域分隔符  -F指定域分隔符為':'   (單詞域的縮寫)。劃分域,填充域,$0則表示所有域,$1表示第一個域,$n表示第n個域。預設域分隔符是"空白鍵" 或 "[tab]鍵",是以$1表示登入使用者 

這種是awk+action的示例,每行都會執行action{print $1}。  

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

如果隻是顯示/etc/passwd的賬戶和賬戶對應的shell,而賬戶與shell之間以tab鍵分割

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

3、#awk -F: '/root/' /etc/passwd  搜尋/etc/passwd有root關鍵字的所有行

這種是pattern的使用示例,比對了pattern(這裡是root)的行才會執行action(沒有指定action,預設輸出每行的内容)。

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

4、shell程式設計統計某個檔案夾下的檔案占用的位元組數,過濾4096大小的檔案(if語句):

  1.   ls -l |awk ' BEGIN { size= ;print "[ start] size is ", size} {if($5!=4096){size=size+$5;}} END{print "[ end] size is ", size/1024/1024,"M "}'
  2.   [end]size is  8.22339 M

awk中的條件語句 if 是從C語言中借鑒來的: 

  1.   if (expression) {
  2.   statement;
  3.   statement;
  4.   ... ...
  5.   }
  6.   if (expression) {
  7.   statement;
  8.   } else {
  9.   statement2;
  10.   }
  11.   if (expression) {
  12.   statement1;
  13.   } else if (expression1) {
  14.   statement2;
  15.   } else {
  16.   statement3;
  17.   }

5、 awk程式設計

這裡沒有初始化count,雖然預設是0,但是妥當的做法還是初始化為0:

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

以M為機關無非就是除于1024再除于1024 

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具
linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具
  1.   if (expression) {
  2.   statement;
  3.   statement;
  4.   ... ...
  5.   }
  6.   if (expression) {
  7.   statement;
  8.   } else {
  9.   statement2;
  10.   }
  11.   if (expression) {
  12.   statement1;
  13.   } else if (expression1) {
  14.   statement2;
  15.   } else {
  16.   statement3;
  17.   }
linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

顯示/etc/passwd的賬戶

  1.   awk - F ':' ' BEGIN { count= ;} {name[ count] = $ ; count++;}; END{ for (i = ; i < NR; i++) print i, name[i]}' /etc/passwd
  2.   root
  3.   daemon
  4.   bin
  5.   sys
  6.   sync
  7.   games
  8.   ......

轉載于:https://www.cnblogs.com/shenLong1356/p/11299665.html

一、ls -l | grep ^d 

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具
linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

二、shell強大的awk  檔案搜尋分析刷選工具

參考:https://www.cnblogs.com/chenhuan001/p/6297615.html

1、 awk '{pattern + action}' {filenames} pattern查找的内容 action指令 filenames要查找的對象

盡管操作可能會很複雜,但文法總是這樣,其中 pattern 表示 AWK 在資料中查找的内容,而 action 是在找到比對内容時所執行的一系列指令。花括号({})不需要在程式中始終出現,但它們用于根據特定的模式對一系列指令進行分組。 pattern就是要表示的正規表達式,用斜杠括起來。

awk語言的最基本功能是在檔案或者字元串中基于指定規則浏覽和抽取資訊,awk抽取資訊後,才能進行其他文本操作。完整的awk腳本通常用來格式化文本檔案中的資訊。

通常,awk是以檔案的一行為處理機關的。awk每接收檔案的一行,然後執行相應的指令,來處理文本。

有三種方式調用awk

  1.   .指令行方式
  2.   awk [-F field-separator] 'commands' input- file(s)
  3.   其中,commands 是真正awk指令,[-F域分隔符]是可選的。 input- file(s) 是待處理的檔案。
  4.   在awk中,檔案的每一行中,由域分隔符分開的每一項稱為一個域。通常,在不指名-F域分隔符的情況下,預設的域分隔符是空格。
  5.   .shell腳本方式
  6.   将所有的awk指令插入一個檔案,并使awk程式可執行,然後awk指令解釋器作為腳本的首行,一遍通過鍵入腳本名稱來調用。
  7.   相當于shell腳本首行的:#!/bin/sh
  8.   可以換成:#!/bin/awk
  9.   .将所有的awk指令插入一個單獨檔案,然後調用:
  10.   awk -f awk-script- file input- file(s)
  11.   其中,-f選項加載awk-script- file中的awk腳本,input- file(s)跟上面的是一樣的。

執行個體:

顯示/etc/passwd的賬戶

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

2、#cat /etc/passwd |awk  -F ':'  '{print $1}'   awk工作流程

awk工作流程是這樣的:讀入有'\n'換行符分割的一條記錄,然後将記錄按指定的  域分隔符  -F指定域分隔符為':'   (單詞域的縮寫)。劃分域,填充域,$0則表示所有域,$1表示第一個域,$n表示第n個域。預設域分隔符是"空白鍵" 或 "[tab]鍵",是以$1表示登入使用者 

這種是awk+action的示例,每行都會執行action{print $1}。  

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

如果隻是顯示/etc/passwd的賬戶和賬戶對應的shell,而賬戶與shell之間以tab鍵分割

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

3、#awk -F: '/root/' /etc/passwd  搜尋/etc/passwd有root關鍵字的所有行

這種是pattern的使用示例,比對了pattern(這裡是root)的行才會執行action(沒有指定action,預設輸出每行的内容)。

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

4、shell程式設計統計某個檔案夾下的檔案占用的位元組數,過濾4096大小的檔案(if語句):

  1.   ls -l |awk ' BEGIN { size= ;print "[ start] size is ", size} {if($5!=4096){size=size+$5;}} END{print "[ end] size is ", size/1024/1024,"M "}'
  2.   [end]size is  8.22339 M

awk中的條件語句 if 是從C語言中借鑒來的: 

  1.   if (expression) {
  2.   statement;
  3.   statement;
  4.   ... ...
  5.   }
  6.   if (expression) {
  7.   statement;
  8.   } else {
  9.   statement2;
  10.   }
  11.   if (expression) {
  12.   statement1;
  13.   } else if (expression1) {
  14.   statement2;
  15.   } else {
  16.   statement3;
  17.   }

5、 awk程式設計

這裡沒有初始化count,雖然預設是0,但是妥當的做法還是初始化為0:

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

以M為機關無非就是除于1024再除于1024 

linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具
linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具
  1.   if (expression) {
  2.   statement;
  3.   statement;
  4.   ... ...
  5.   }
  6.   if (expression) {
  7.   statement;
  8.   } else {
  9.   statement2;
  10.   }
  11.   if (expression) {
  12.   statement1;
  13.   } else if (expression1) {
  14.   statement2;
  15.   } else {
  16.   statement3;
  17.   }
linux指令awk一、ls -l | grep ^d  二、shell強大的awk  檔案搜尋分析刷選工具

顯示/etc/passwd的賬戶

  1.   awk - F ':' ' BEGIN { count= ;} {name[ count] = $ ; count++;}; END{ for (i = ; i < NR; i++) print i, name[i]}' /etc/passwd
  2.   root
  3.   daemon
  4.   bin
  5.   sys
  6.   sync
  7.   games
  8.   ......

繼續閱讀