<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://www.gentoo-zh.org/extern.php?action=feed&amp;tid=509&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Gentoo中文社区 / AWK 行距和行号计算]]></title>
		<link>https://www.gentoo-zh.org/viewtopic.php?id=509</link>
		<description><![CDATA[AWK 行距和行号计算 最近发表的帖子。]]></description>
		<lastBuildDate>Sun, 13 Nov 2022 09:44:33 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[AWK 行距和行号计算]]></title>
			<link>https://www.gentoo-zh.org/viewtopic.php?pid=546#p546</link>
			<description><![CDATA[<p>一. 行距：<br />1. 每行间加一个空行<br />awk&#039;1; { print &quot;&quot; }&#039;&#160; &#160;filname.ext&#160; &#160; &#160; &#160; &#160; &#160; &#160;#输出当前行，在输出一个空行<br />awk&#039;1 { print } { print &quot;&quot; }&#039;&#160; &#160;filname.ext&#160; &#160; <br />awk&#039;{ print } { print &quot;&quot; }&#039;&#160; &#160;filname.ext</p><p>2. 1的另外一种实现方法：<br />awk&#039;BEGIN { ORS=&quot;/n/n&quot; }; 1&#039;&#160; &#160;filname.ext&#160; &#160; #预先设置每一行的分隔符号为两个换行；你可以尝试把ORS设置为其他的看看效果如何</p><p>3. 仅输出非空行，并每行间在加一个空行<br />awk&#039;NF { print $0 &quot;/n&quot; }&#039;&#160; &#160;filname.ext&#160; &#160; &#160; &#160;#NF表示当前行的字段数，$0表示当前行，最后再加一个换行<br />4. 双倍行距；没行间两个空行<br />awk&#039;1; { print &quot;/n&quot; }&#039;&#160; &#160;filname.ext&#160; &#160; &#160;#默认输出后会换行的，输出/n，则会输出两个空白行<br />等同于：<br />awk&#039;{ print; print &quot;/n&quot; }&#039;&#160; &#160;filname.ext</p><br /><p>二. 行号和计算<br />5. 显示当前行在所在文件中的行号<br />awk&#039;{ print FNR &quot;/t&quot; $0 }&#039;&#160; &#160;filname.ext&#160; &#160; &#160; #FNR，表示当前行在文件中的行号</p><p>6. 显示当前行在本次处理过程中的行号<br />awk&#039;{ print NR &quot;/t&quot; $0 }&#039;&#160; &#160;filname.ext&#160; &#160; &#160; &#160;#NR，表示当前行在本次处理过程中的行号</p><p>小疑问：为啥有FNR和NR的差别呢？效果不都是一样么？ 如果你给如：filname1.ext filname2.ext，你就会看到差别了。原来：FNR，是每个文件中的，换了一个文件，会归零；而NR则每个文件会累加起来的</p><p>7. 使用简单样式来输出<br />awk&#039;{ printf(&quot;%5d : %s/n&quot;, NR, $0) }&#039;&#160; &#160;filname.ext&#160; &#160; #行号占用5位，不足补空格</p><p>8. 显示非空行<br />awk&#039;NF { $0=++a &quot; :&quot; $0 }; { print }&#039;&#160; &#160;filname.ext&#160; &#160; #NF前面说了，表示当前行的行号，此处用他作为条件，如果是空行，则NF为0，跳过；否则，用动态变量a存储非空行的数目</p><p>9. 计算行数：效果类似wc -l<br />awk&#039;END { print NR }&#039;&#160; &#160;filname.ext&#160; &#160; #END表示每行都处理完了后，在执行，此时NR就是最后一行的行号，也就是总的行数了。</p><p>10. 计算每一行的和<br />awk&#039;{ s = 0; for (i = 1; i &lt;= NF; i++) s = s+$i; print s }&#039;&#160; &#160;filname.ext<br />#s用作每行和的累加，从1到NF(每行总的字段数)，依次累加<br />11.&#160; 计算文件中所有字段的和<br />awk&#039;{ for (i = 1; i &lt;= NF; i++) s = s+$i }; END { print s }&#039;&#160; &#160;filname.ext<br />#s用作总和的累加，每行都处理完成了，再输出s；注意和10对比，此处没有每行清零，所以累加了。没有设置的变量，默认为空，但是会根据上下文数值计算情况自动变为0</p><p>12. 将每个字段用其绝对值代替<br />awk&#039;{ for (i = 1; i &lt;= NF; i++) if ($i &lt; 0) $i = -$i; print }&#039;&#160; &#160;filname.ext<br />＃$i表示当前行中的字段，$0表示当前行，可以改变$i的值</p><p>13. 计算文件中总的字段和（例如计算单词数）<br />awk&#039;{ total = total + NF }; END { print total }&#039;&#160; &#160;filname.ext</p><p>14. 计算匹配指定信息的总行数<br />awk&#039;/Linux/ { n++ }; END { print n+0 }&#039;&#160; &#160;filname.ext</p><p>15. 找到文件中每行第一个字段中，最大的数，以及其所在的行<br />awk&#039;$1 &gt; max { max=$1; maxline=$0 }; END { print max, maxline }&#039;&#160; &#160;filname.ext<br />#用max存储最大的数，maxline存储最大数所在的行，并在最后输出</p><p>16. 显示当前行的字段数，并输出当前行<br />awk&#039;{ print NF &quot;:&quot; $0 } &#039;&#160; &#160;filname.ext</p><p>17. 显示每行最后一个字段的内容<br />awk&#039;{ print $NF }&#039;&#160; &#160;filname.ext&#160; &#160; #NF表示当前行的字段数，例如为3，则$NF，就是$3，也就是第三个字段了</p><p>18. 显示最后一行的最后一个字段<br />awk&#039;{ field = $NF }; END { print field }&#039;&#160; &#160;filname.ext<br />#每行处理没有输出，尽在最后输出，field作为每行的最后一行的暂存变量</p><p>19. 显示字段数小于4的行<br />awk&#039;NF &lt; 4&#039;&#160; &#160;filname.ext&#160; &#160; #{}以外的内容，作为条件，没有{}，则默认输出当前行</p><p>20. 显示每行的最后一个字段小于4的行<br />awk&#039;$NF &lt; 4&#039;&#160; &#160;filname.ext&#160; &#160; #注意和19对比</p>]]></description>
			<author><![CDATA[dummy@example.com (batsom)]]></author>
			<pubDate>Sun, 13 Nov 2022 09:44:33 +0000</pubDate>
			<guid>https://www.gentoo-zh.org/viewtopic.php?pid=546#p546</guid>
		</item>
	</channel>
</rss>
