2つの列の長さが異なる場合、どのようにゼロを追加しますか?

2つの列の長さが異なる場合、どのようにゼロを追加しますか?

2つの列があり、1つの列には20個のデータがあり、2番目の列には16個のデータがあります。だから、2列の長さが同じになることを望みます。では、どのようにゼロを追加しますか?次のファイルがあります。

1 2  
3 4   
4 5  
7    
8   
8

したがって、最初の列には6つの要素があり、2番目の列には3つの要素があります。だから私は2番目の列に0を追加して2つの列を同じにしたいと思います。したがって、出力ファイルは次のようになります。

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

答え1

そしてawk

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

0与えられたレコードのフィールド数()がNF2より小さい場合、2番目のフィールドはに設定されます。

これは、フィールドのない行(空の行)に対して提供されます" 0"。代わりに、次のことができます。

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

ORこの行を使用するには"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

これは、ファイルを1行ずつ読み込み、2つの「フィールド」(つまり、スペースで区切られたテキスト文字列)を持つすべての行に対して両方のフィールドを印刷しますが、1つのフィールドのみを持つすべての行の場合、そのフィールドと区切り文字を持つ「0」 「を印刷します。その間の空間。

ここではテキストの調整は行われず、ファイルに1つまたは2つの数字を含む行のみが含まれていると仮定しているため、ここではチェックは行われません(含めるのは簡単ですが)。 1つまたは両方のフィールドがない行は出力で無視されます。

関連情報