如果两列长度不一样,如何加零?

如果两列长度不一样,如何加零?

我有两列,但一列有 20 个数据,第二列有 16 个数据。所以我想让两列的长度相等。那么如何加零呢?我有一个像这样的文件:

1 2  
3 4   
4 5  
7    
8   
8

因此第一列有 6 个元素,第二列有 3 个元素。所以我想通过在第二列中添加零来使两列相等。所以输出文件应该是这样的:

1 2        
3 4  
4 5   
7 0  
8 0    
8 0 

答案1

awk

awk 'NF < 2 {$2 = 0}; 1' < file

0如果给定记录中的字段数 ( NF) 小于 2,则将第二个字段设置为。

请注意,对于没有字段的行(空行),这将给出" 0".相反,你可以这样做:

awk 'NF < 1 {$1 = 0}; NF < 2 {$2 = 0}; 1' < file

为了使这些行变为"0 0"或:

awk 'NF && NF < 2 {$2 = 0}; 1' < file

保留那些空白行。

答案2

尝试这个,

awk -v OFS=" " '{if ($2=="") print $0,0; else print $0}' file
1 2  
3 4   
4 5  
7 0
8 0
8 0

答案3

您可以awk为此目的使用:

awk '{if (NF == 2) print $1 " " $2; else if (NF == 1) print $1 " 0";}' input_file.txt > output_file.txt

这将按行读取文件,并且对于所有具有两个“字段”(即以空格分隔的文本串)的行,打印这两个字段,但对于只有一个字段的所有行,打印该字段和一个“ 0”,其间有分隔空间。

请注意,此处未执行任何文本调整,并且我假设该文件仅包含具有一两个数字的行,因此此处不执行任何检查(尽管包含它们很容易)。任何没有一个或两个字段的行都将在输出中被忽略。

相关内容