擅长:python、mysql、java
<p>假设输入位于名为<code>file</code>的文件中:</p>
<pre><code>$ awk 'NR==1{for (i=1;i<=NF;i++) a[i]=$i;next} NR==2{for (i=1;i<=NF;i++) printf "%-20s",a[i] $i;print"";next} 1' file
L1_IWWPTH L1_IWWPT C-14WWPTH
1 2 3
</code></pre>
<h3>工作原理</h3>
<ul>
<li><p><code>NR==1{for (i=1;i<=NF;i++) a[i]=$i;next}</code></p>
<p>对于第一行,保存数组<code>a</code>中的所有列标题。然后,跳过其余的命令并跳到下一行。</p></li>
<li><p><code>NR==2{for (i=1;i<=NF;i++) printf "%-20s",a[i] $i;print"";next}</code></p>
<p>对于第二行,打印所有列标题,合并第一行和第二行的标题。然后,跳过其余的命令并跳到下一行。</p></li>
<li><p><code>1</code></p>
<p><code>1</code>是awk对按原样打印行的神秘速记。这是在秒后对所有行执行的。</p></li>
</ul>
<h3>制表符分隔列,可能缺少列</h3>
<p>如果列以制表符分隔:</p>
<pre><code>awk -F'\t' 'NR==1{for (i=1;i<=NF;i++) a[i]=$i;next} NR==2{for (i=1;i<=NF;i++) printf "%s\t",a[i] $i;print"";next} 1' file
</code></pre>