第1章 awk命令基础

1.1 awk命令执行过程

1.2 awk中模式与动作

1.2.1 awk眼中的

1.3 awk默认有一把“菜刀”

 -F        指定分隔符 

 -vFS

 FS  == field sep       每一列的分隔符

 OFS ==output field sep  输出每一列的时候使用的分隔符

1.4 awk的内置变量

<td style="width: 9.0cm; border-top: solid white 1.0pt; border-left: none; border-bottom: solid white 1.0pt; border-right: none; background: #9BBB59; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="340">
  <p>
    <strong><span style="font-family: 新宋体; times new roman"4times new roman"; color: white;">含义</span></strong>
  </p>
</td>

<td style="width: 182.85pt; border-top: 1pt solid white; border-right: 1pt solid white; border-bottom: 1pt solid white; border-left: none; background: #9bbb59; padding: 0cm 5.4pt;" valign="top" width="244">
  <p>
    <strong><span style="font-family: 新宋体; times new roman"4times new roman"; color: white;">英文全写</span></strong>
  </p>
</td>
<td style="width: 9.0cm; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #D6E3BC; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="340">
  <p>
    &nbsp;<span style="font-family: 新宋体;">每一列的分隔符</span>
  </p>
</td>

<td style="width: 182.85pt; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #D6E3BC; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="244">
  <p>
    field sep&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </p>
</td>
<td style="width: 9.0cm; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #EAF1DD; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="340">
  <p>
    &nbsp;<span style="font-family: 新宋体;">每一行有多少列</span>
  </p>
</td>

<td style="width: 182.85pt; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #EAF1DD; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="244">
  <p>
    number&nbsp; of field
  </p>
</td>
<td style="width: 9.0cm; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #D6E3BC; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="340">
  <p>
    &nbsp;<span style="font-family: 新宋体;">输出每一列的时候使用的分隔符</span>
  </p>
</td>

<td style="width: 182.85pt; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #D6E3BC; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="244">
  <p>
    output field sep
  </p>
</td>
<td style="width: 9.0cm; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #EAF1DD; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="340">
  <p>
    &nbsp;<span style="font-family: 新宋体;">记录号</span> <span style="font-family: 新宋体;">行号</span>
  </p>
</td>

<td style="width: 182.85pt; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #EAF1DD; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="244">
  <p>
    number of record
  </p>
</td>
<td style="width: 9.0cm; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #D6E3BC; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="340">
  <p>
    &nbsp;<span style="font-family: 新宋体;">每一行的分隔符(每一行的结束标记)</span>
  </p>
</td>

<td style="width: 182.85pt; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #D6E3BC; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="244">
  &nbsp;
</td>
<td style="width: 9.0cm; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #EAF1DD; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="340">
  <p>
    &nbsp;<span style="font-family: 新宋体;">取某一列</span>
  </p>
</td>

<td style="width: 182.85pt; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #EAF1DD; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="244">
  &nbsp;
</td>
<td style="width: 9.0cm; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #D6E3BC; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="340">
  <p>
    &nbsp;<span style="font-family: 新宋体;">取出这一行</span>
  </p>
</td>

<td style="width: 182.85pt; border-top: none; border-left: none; border-bottom: solid white 1.0pt; border-right: solid white 1.0pt; background: #D6E3BC; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="244">
  &nbsp;
</td>

1.4.1 $NF的使用

1.5 练习题awk如何使用正则?

1)      显示Xiaoyu的姓氏和ID号码

2)      显示所有ID号码最后一位数字是1或5的人的全名

3)      姓氏是Zhang的人,显示他的第二次捐款金额及她的名字

4)      显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135

1.5.1 环境准备

1.5.1.1 内容释义:

1.5.2 显示出第二列中包含X 的。

1.5.3 显示Xiaoyu的姓氏和ID号码

1.5.4 显示所有ID号码最后一位数字是15的人的全名

1.5.5 姓氏是Zhang的人,显示他的第二次捐款金额及她的名字

1.5.6 显示Xiaoyu的捐款.每个值时都有以$开头.$520$200$135

1.6 awk中的$0是什么鬼?

1.7 awk中的替换

1.7.1 使用gusb 函数进行替换

               r  /找谁/

               s  “替换成什么”

               [] 替换那个部分的

       表示为: gsub(/找谁/,“替换成什么”,替换那个部分的)

1.7.2 替换文本中的内容

       添加上限定条件后,取到的结果会更加的精确。

1.8 练习题】判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin,如果是显示用户名字

1.8.1 对齐】输出的结果更美观整齐–column命令

第2章 awkBEGIN END

2.1 怎么把正则表达式作为条件

BEGIN:开始

              里面的内容会在awk读取文件之前运行

              BEGIN里面定义awk的内置变量

END

END{} 里面放入内容,在读取完文件内容后执行

              先计算,在END里面输出结果 

              先计算再输出

2.1.1 一个栗子】执行完输出后,再输出一个“结束”

2.2 企业案例】统计/etc/services文件里面的空行数量

2.2.1 使用awkEND模式

2.2.2 查看i++的执行过程

2.2.3 其他方法:

2.3 案例seq 100 >num.txt ,计算这个文件每一行相加的结果

i=i+$0  累计相加 计算总和

i=i+1  i++   计数

第3章 awk数组

3.1 数组是用来做什么的?

3.1.1 他能够干些什么?

3.2 数组详解—"酒店"

假设我们有一个酒店

3.2.1 如何查看房间里住的是哪位客人?

3.2.2 使用for语句,对酒店进行循环/查房

print pol,hotel[pol] <span style=“font-family: 新宋体; times new roman"4times new roman”;color: #00B050;">:

3.3 企业面试题】统计域名访问次数(去重统计)。处理以下文件内容,将域名取出并根据域名进行计数排序处理百度和sohu面试题)

3.3.1 方法一:sort uniq

3.3.2 方法2 awk数组

3.3.2.1 第一步 取出域名

3.3.2.2 第二步 显示

3.3.2.3 第三步 显示结果

第4章 <span style=“font-family: 新宋体; times new roman"4times new roman”;background: aqua;">课后题目

4.1 统计secure文件中谁在破解你的密码(统计出破解你密码的ip地址出现的次数)

4.1.1 方法一

4.1.2 方法二

4.1.3 结果统计

4.2 统计access.log文件中对ip地址去重并统计重复数

4.3 统计access.log文件中网站一共使用了多少流量

    <li>
      <a href="#13_awkldquordquo">1.3 awk默认有一把&ldquo;菜刀&rdquo;</a>
    </li>
    <li>
      <a href="#14_awk">1.4 awk的内置变量</a><ul>
        <li>
          <a href="#141_NF">1.4.1 $NF的使用</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#15_awk">1.5 【练习题】awk如何使用正则?</a><ul>
        <li>
          <a href="#151">1.5.1 环境准备</a><ul>
            <li>
              <a href="#1511nbsp">1.5.1.1&nbsp;内容释义:</a>
            </li>
          </ul>
        </li>
        
        <li>
          <a href="#152_X">1.5.2 显示出第二列中包含X 的。</a>
        </li>
        <li>
          <a href="#153_XiaoyuID">1.5.3 显示Xiaoyu的姓氏和ID号码</a>
        </li>
        <li>
          <a href="#154_ID15">1.5.4 显示所有ID号码最后一位数字是1或5的人的全名</a>
        </li>
        <li>
          <a href="#155_Zhang">1.5.5 姓氏是Zhang的人,显示他的第二次捐款金额及她的名字</a>
        </li>
        <li>
          <a href="#156_Xiaoyu520200135">1.5.6 显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#16_awk0">1.6 awk中的$0是什么鬼?</a>
    </li>
    <li>
      <a href="#17_awk">1.7 awk中的替换</a><ul>
        <li>
          <a href="#171_gusb">1.7.1 使用gusb 函数进行替换</a>
        </li>
        <li>
          <a href="#172">1.7.2 替换文本中的内容</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#18_shellshellshellsbinnologin">1.8 【练习题】判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin),如果是显示用户名字</a><ul>
        <li>
          <a href="#181_--column">1.8.1 【对齐】输出的结果更美观整齐--column命令</a>
        </li>
      </ul>
    </li>
  </ul>
</li>

<li>
  <a href="#2_awkBEGIN_END">第2章 awk中BEGIN 和 END</a><ul>
    <li>
      <a href="#21">2.1 怎么把正则表达式作为条件</a><ul>
        <li>
          <a href="#211_ldquordquo">2.1.1 【一个栗子】执行完输出后,再输出一个&ldquo;结束&rdquo;</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#22_etcservices">2.2 【企业案例】统计/etc/services文件里面的空行数量</a><ul>
        <li>
          <a href="#221_awkEND">2.2.1 使用awk的END模式</a>
        </li>
        <li>
          <a href="#222_i">2.2.2 查看i++的执行过程</a>
        </li>
        <li>
          <a href="#223">2.2.3 其他方法:</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#23_seq_100_numtxt">2.3 【案例】seq 100 >num.txt ,计算这个文件每一行相加的结果</a>
    </li>
  </ul>
</li>

<li>
  <a href="#3_awk">第3章 awk数组</a><ul>
    <li>
      <a href="#31">3.1 数组是用来做什么的?</a><ul>
        <li>
          <a href="#311">3.1.1 他能够干些什么?</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#32">3.2 数组详解---"酒店"</a><ul>
        <li>
          <a href="#321">3.2.1 如何查看房间里住的是哪位客人?</a>
        </li>
        <li>
          <a href="#322_for">3.2.2 使用for语句,对酒店进行循环/查房</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#33_sohu">3.3 【企业面试题】统计域名访问次数(去重统计)。处理以下文件内容,将域名取出并根据域名进行计数排序处理百度和sohu面试题)</a><ul>
        <li>
          <a href="#331_sort_uniq">3.3.1 方法一:sort uniq</a>
        </li>
        <li>
          <a href="#332_2_awk">3.3.2 方法2 awk数组</a><ul>
            <li>
              <a href="#3321nbsp">3.3.2.1&nbsp;第一步 取出域名</a>
            </li>
            <li>
              <a href="#3322nbsp">3.3.2.2&nbsp;第二步 显示</a>
            </li>
            <li>
              <a href="#3323nbsp">3.3.2.3&nbsp;第三步 显示结果</a>
            </li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>
</li>

<li>
  <a href="#4">第4章 课后题目:</a><ul>
    <li>
      <a href="#41_secureip">4.1 统计secure文件中谁在破解你的密码(统计出破解你密码的ip地址出现的次数)</a><ul>
        <li>
          <a href="#411">4.1.1 方法一</a>
        </li>
        <li>
          <a href="#412">4.1.2 方法二</a>
        </li>
        <li>
          <a href="#413">4.1.3 结果统计</a>
        </li>
      </ul>
    </li>
    
    <li>
      <a href="#42_accesslogip">4.2 统计access.log文件中对ip地址去重并统计重复数</a>
    </li>
    <li>
      <a href="#43_accesslog">4.3 统计access.log文件中网站一共使用了多少流量</a>
    </li>
  </ul>
</li>