<?xml version="1.0" encoding="gbk"?>
<rss version="2.0">
  <channel>
    <title>曲径通幽论坛 - awk</title>
    <link>http://www.groad.net/bbs/forum.php?mod=forumdisplay&amp;fid=117</link>
    <description>Latest 20 threads of awk</description>
    <copyright>Copyright(C) 曲径通幽论坛</copyright>
    <generator>Discuz! Board by Comsenz Inc.</generator>
    <lastBuildDate>Fri, 10 Apr 2026 21:44:45 +0000</lastBuildDate>
    <ttl>60</ttl>
    <image>
      <url>http://www.groad.net/bbs/static/image/common/logo_88_31.gif</url>
      <title>曲径通幽论坛</title>
      <link>http://www.groad.net/bbs/</link>
    </image>
    <item>
      <title>printf()/sprintf() -- 转换打印函数</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=7462</link>
      <description><![CDATA[sprintf() 是个字符串函数，它的语法和 printf() 是一致的，区别是 sprintf() 函数将其输出存到变量中，而不是标准输出，如：

上面，printf() 函数直接将转换结果输出到标准输出。其中，8.3f 中的 8 表示控制整个输出结果的宽度，这里为 8 个字符宽，如果实际输出的结 ...]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Sat, 06 Oct 2012 15:01:37 +0000</pubDate>
    </item>
    <item>
      <title>使用 awk 模拟 head, tail, tac</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6849</link>
      <description><![CDATA[下面使用 awk 简单模拟 head ,tail ,tac  这几个命令的基本功能。

测试文本：



1. 模拟 head 打印头 3 行内容


2. 模拟 tail 命令打印末尾 3 行内容

上面， buffer[NR % 3] = $0; 这条语句实际是从第 1 条记录开始不断的往 buffer[] 数组里填充每行数据，但最终该 ...]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Sun, 08 Apr 2012 13:24:31 +0000</pubDate>
    </item>
    <item>
      <title>substr() -- 取出子串</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6835</link>
      <description><![CDATA[substr() 函数原型如下：

函数有 3 个参数，主要利用第 2 个和第 3 个参数从第 1 个参数 string 所代表的字符串中取出一个子串，其中第 2 个参数表示要从 start 处开始，然后取长度为 length 的一段子串，如下所示：

如果函数省略了第 3 个参数，那么就取从 start 处 ...]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Thu, 05 Apr 2012 11:21:20 +0000</pubDate>
    </item>
    <item>
      <title>tolower()/toupper() -- 小写转换与大写转换</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6834</link>
      <description><![CDATA[tolower() 和 touuper() 函数原型如下：

它们分别将参数字符串转换为小写和大写。

测试：]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Thu, 05 Apr 2012 09:49:48 +0000</pubDate>
    </item>
    <item>
      <title>gsub() -- 全局字串替换</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6833</link>
      <description><![CDATA[相对于 sub()&#160;&#160;函数只能匹配并替换最左边的一个，gsub() 函数则可以实现全局替换，函数名字中的 g 正是 global 之意。

测试：]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Thu, 05 Apr 2012 09:46:05 +0000</pubDate>
    </item>
    <item>
      <title>sub() -- 替换一个匹配的子串</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6832</link>
      <description><![CDATA[sub() 函数原型如下：

它的功能是：从 target 里查找是否有 regexp 的匹配，有则用 replacement 替换之。注意，这里的匹配只匹配最先匹配的一个(也就是最左边的那个0)。如果要全部匹配，那么需要用 gsub() 函数。

测试：

由上面的输出可见，只有最左边(leftmost)的 g ...]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Thu, 05 Apr 2012 09:16:18 +0000</pubDate>
    </item>
    <item>
      <title>split() -- 将字符串切割成多个子串</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6831</link>
      <description><![CDATA[split()  原型如下：

它可以将第 1 个参数 string 所表示的字符串以第 3 个参数 fieldsep 表示的分隔符切割成多个子串，然后将这些子串依次存储在第 2 个参数 array 所表示的数组里。

测试：]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Thu, 05 Apr 2012 07:29:45 +0000</pubDate>
    </item>
    <item>
      <title>match() -- 在字串中查找正则匹配并返回其位置</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6830</link>
      <description><![CDATA[match() 函数的功能是在字串中查找正则匹配并返回其位置，它的原型如下：

其中 string 是要搜索的字串，regexp 是一个正则表达式，即按照正则来搜索 string 以查找相应的匹配。如果找到，那么返回其位置(从 1 开始)，如果没找到，那么返回 0 。另外，match 函数会设置 ...]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Thu, 05 Apr 2012 03:18:22 +0000</pubDate>
    </item>
    <item>
      <title>length() -- 计算字串长度</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6829</link>
      <description><![CDATA[length() 函数用来计算字串长度。

测试：

注意上面括号里的乘法运算，10*100 = 1000 共 4 位，100 * 100 = 10000 共 5 位。]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Thu, 05 Apr 2012 01:15:24 +0000</pubDate>
    </item>
    <item>
      <title>index() -- 查找子字串的索引</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6828</link>
      <description><![CDATA[index() 函数的语法格式如下：

这个函数的意思是，从 s 这个字符串中搜索 t，如果找到则返回其所在的索引，否则返回 0 。

测试：]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Thu, 05 Apr 2012 00:48:00 +0000</pubDate>
    </item>
    <item>
      <title>外部命令与 getline</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6733</link>
      <description><![CDATA[getline 常用于读取外部命令的输出，在读取后，这些输出内容的列都会依次被编号为 $1, $2, $3... 等，看下面示例：

这里，首先只运行 ls -l 时会看到：

上面的 ls -l 命令的输出通过管道后，第一行内容(total 68)被 awk 中的第 1 个 getline 获取，然后再次执行一条 g ...]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Tue, 27 Mar 2012 16:30:41 +0000</pubDate>
    </item>
    <item>
      <title>循环(while, do..while, for, break, continue, exit)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6280</link>
      <description><![CDATA[awk 中的循环和 C 语言中的类似，下面是几种语法形式，下面是几个实例。

1. 在一行上连续输出 10 个字符 \'a\' ：

注意，BEGIN 不能漏，否则不能输出，这是因为 awk 是作用于输入文本的，而 BEGIN 是在所有作用于文本的内容之前的处理(预处理)，因此它不依赖于输入文本 ...]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Sat, 25 Feb 2012 08:51:03 +0000</pubDate>
    </item>
    <item>
      <title>if, if else, if else if, :?</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6279</link>
      <description><![CDATA[跟 C 语言类似，awk 中也可以用如  if, if else, if else if, :?  这些关键字进行判断，它们的语法也相似，如：




 
 
测试文本如下所示：

上面文本中，第 1 列是学生姓名，后面 3 列分别表示学生的 3 门功课成绩，其中有些学生不参加考试，从而没有分数记录。下面找 ...]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Sat, 25 Feb 2012 06:18:53 +0000</pubDate>
    </item>
    <item>
      <title>运算符</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6278</link>
      <description><![CDATA[和 C 语言一样，awk 也有运算符，且分两种，一种是单目运算符，一种是双目运算符。
 
单目运算符


 
双目运算符中的数学运算符：

双目运算符中的赋值运算符：

双目运算符中的条件运算符：

正则表达式运算符：

下面是几个实例：

1. 计算 /etc/passwd 文件中所有域 ...]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Sat, 25 Feb 2012 03:35:22 +0000</pubDate>
    </item>
    <item>
      <title>FNR 当前输入文件的记录数</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6273</link>
      <description><![CDATA[NR 和 FNR 在只有一个文件时意思是一致的，都表示当前文件的记录数。但是当有多个输入文件时，NR 表示所有文件的总共记录数，而 FNR 只表示当前文件的记录数。

先看两个测试文件的内容：

第 1 个文件共 4 行，即 4 条记录：


那么运行下面的命令可以验证上面所述：]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Fri, 24 Feb 2012 16:20:14 +0000</pubDate>
    </item>
    <item>
      <title>FILENAME 当前输入文件名</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6272</link>
      <description><![CDATA[FILENAME 是内置变量，表示当前的输入文件名。

如下测试输出：]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Fri, 24 Feb 2012 15:54:07 +0000</pubDate>
    </item>
    <item>
      <title>ORS 输出记录分隔符</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6270</link>
      <description><![CDATA[相对于 RS  是记录分隔符，同样也有输出记录分隔符 ORS，它也是一个内置变量。

同样适用 RS 里的测试文本，运行命令如下：]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Fri, 24 Feb 2012 10:58:14 +0000</pubDate>
    </item>
    <item>
      <title>RS 记录分隔符</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6268</link>
      <description><![CDATA[RS 的全称是 Record Separator，是记录分隔符之意，它也是一个内置变量。
 
一般情况下，一条记录就是一行，这里默认的记录分隔符就是一个换行符(\\n) 。但是有些记录并不是一行一条，而是有其它形式。如下面这个文本：

这里，我们打算将类似于

这样的一个数据块作为一 ...]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Fri, 24 Feb 2012 10:24:27 +0000</pubDate>
    </item>
    <item>
      <title>OFS 输出分隔符</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6265</link>
      <description><![CDATA[OFS 全称为： Output Field Separator 相对于 FS 变量是输入文件的分隔符，内置变量 OFS 是输出结果时指定分隔符(第 1 个字母 O 就是 output 之意)。

下面同样用 /etc/passwd 文件进行测试。]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Fri, 24 Feb 2012 09:08:42 +0000</pubDate>
    </item>
    <item>
      <title>-F 选项与 FS (域分隔符)</title>
      <link>http://www.groad.net/bbs/forum.php?mod=viewthread&amp;tid=6264</link>
      <description><![CDATA[awk 用内置变量 FS 来表示输入域分隔符。FS 的全称为：Input field separator

默认情况下的分隔符是空白符。如果需要指定别的单个符号或正则表达式作为分隔符，那么可以用内置变量 FS 来指定。在命令行中，可以使用 -F 选项，然后后接 FS 变量。

使用语法如下，



或 ...]]></description>
      <category>awk</category>
      <author>beyes</author>
      <pubDate>Fri, 24 Feb 2012 08:53:49 +0000</pubDate>
    </item>
  </channel>
</rss>