如何均衡列的块的长度

glk*_*shu -1 linux bash shell awk

嗨专家我有一个如下所示的文件我想根据块的最大长度通过在预期答案中给出的末尾附加零来均衡由 > 符号分隔的所有列块。谢谢。

>
1 2 3
3 4 5
>
3 4 5
>
2 3 4
3 4 5
3 4 5
Run Code Online (Sandbox Code Playgroud)

预期产出

>
1 2 3
3 4 5
0 0 0
>
3 4 5
0 0 0
0 0 0
>
2 3 4
3 4 5
3 4 5
Run Code Online (Sandbox Code Playgroud)

jas*_*jas 5

通过设置RSFS您可以将每个块视为单个记录,将每一行视为一个字段。这个 awk 需要两次遍历数据,因此您需要列出文件两次。第一遍计算最大行数,第二遍在必要时填充额外的行。

请注意,因为文件以分隔符开头,所以 awk 会看到我们不关心的初始空记录。这就是我们FNR > 1在第二遍进行测试的原因。

$ awk 'BEGIN { RS=">"; OFS=FS="\n" }
NR == FNR { if (NF > max) max = NF; next }
FNR > 1 { for (i=NF; i<max; ++i) { $i = "0 0 0" } print RS $0 }
' file file
>
1 2 3
3 4 5
0 0 0
>
3 4 5
0 0 0
0 0 0
>
2 3 4
3 4 5
3 4 5
Run Code Online (Sandbox Code Playgroud)