AWK 用于在文件中用   填充其余的列

tin*_*iny 5 awk text-processing

我正在尝试让 AWK 填充“空”列的以下文本文件。

使用 AWK NF 查找最长行并检查哪一行在该列上没有值的基本思想。然后为每个空列添加 x 次 N/A。

这个例子是输入空格分隔的,但当然它可以很容易地更改为任何字符分隔的文件。

输入可以是:

aaa bbb ccc ddd
aaa 
aaa bbb ccc
hhh ppp uuu
www yyy hhh
hhh 111 333 yyy ooo hyy uuuioooy 
Run Code Online (Sandbox Code Playgroud)

以及计算文件中最大列数并将 N/A 添加到空列的输出。

aaa bbb ccc ddd N/A N/A N/A
aaa N/A N/A N/A N/A N/A N/A
aaa bbb ccc N/A N/A N/A N/A
hhh ppp uuu N/A N/A N/A N/A 
www yyy hhh N/A N/A N/A N/A 
hhh 111 333 yyy ooo hyy uuuioooy 
Run Code Online (Sandbox Code Playgroud)

man*_*ork 5

awk 'FNR==NR{if(m<NF)m=NF;next}{for(i=NF;i<m;i++)$(i+1)="N/A"}1' tiny.txt tiny.txt
Run Code Online (Sandbox Code Playgroud)

请注意指定了两次的输入文件名。


Tho*_*hor 5

最简单的方法是分两步做,首先找到最宽的线:

max=$(awk 'max < NF { max = NF } END { print max }' infile)
Run Code Online (Sandbox Code Playgroud)

然后在填写其他列时将其用作输入:

awk -v max=$max '{ for(i=NF+1; i<=max; i++) $i = "N/A"; print }' infile
Run Code Online (Sandbox Code Playgroud)

  • 您需要在第一个上使用 `END{print max}`。 (2认同)