두 열의 길이가 다른 경우 어떻게 0을 추가합니까?

두 열의 길이가 다른 경우 어떻게 0을 추가합니까?

두 개의 열이 있는데 한 열에는 20개의 데이터가 있고 두 번째 열에는 16개의 데이터가 있습니다. 그래서 두 열의 길이가 동일해지기를 원합니다. 그러면 어떻게 0을 추가합니까? 다음과 같은 파일이 있습니다.

1 2  
3 4   
4 5  
7    
8   
8

따라서 첫 번째 열에는 6개의 요소가 있고 두 번째 열에는 3개의 요소가 있습니다. 그래서 두 번째 열에 0을 추가하여 두 열을 동일하게 만들고 싶습니다. 따라서 출력 파일은 다음과 같아야 합니다.

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

답변1

그리고 awk:

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

0주어진 레코드의 필드 수( )가 NF2보다 작으면 두 번째 필드가 로 설정됩니다.

이는 필드가 없는 행(빈 행)에 대해 제공됩니다 " 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

이는 파일을 한 줄씩 읽고 두 개의 "필드"(즉, 공백으로 구분된 텍스트 문자열)가 있는 모든 줄에 대해 두 필드를 모두 인쇄하지만 필드가 하나만 있는 모든 줄의 경우 해당 필드와 구분 기호가 있는 " 0"을 인쇄합니다. 그 사이의 공간.

여기서는 텍스트 조정이 수행되지 않으며 파일에 하나 또는 두 개의 숫자가 있는 줄만 포함되어 있다고 가정하므로 여기에서는 검사가 수행되지 않습니다(포함하는 것이 쉬울지라도). 하나 또는 두 필드가 모두 없는 행은 출력에서 ​​무시됩니다.

관련 정보