AWK는 파일의 나머지 열을 채우는 데 사용됩니다.

AWK는 파일의 나머지 열을 채우는 데 사용됩니다.

다음 텍스트 파일의 "빈" 열을 채우도록 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 

그리고 출력에서는 파일의 최대 열 수를 계산하고 빈 열에 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 

답변1

가장 쉬운 방법은 두 단계로 수행하는 것입니다. 먼저 가장 넓은 선을 찾습니다.

max=$(awk 'max < NF { max = NF } END { print max }' infile)

그런 다음 다른 열을 채울 때 이를 입력으로 사용합니다.

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

답변2

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

입력 파일 이름은 두 번 지정됩니다.

답변3

파일에 누락된 필드가 있는 행에 있는 모든 열에 대한 필드 구분 기호가 있는 경우 누락된 필드가 행 끝뿐만 아니라 행 내에 있는 경우도 처리하는 또 다른 좋은 솔루션이 있습니다. 예를 들어 빈 셀이 있는 스프레드시트(올바른 구분 기호를 사용하는 경우)입니다.

예를 들어. 공백으로 구분된 파일의 경우

aaa bbb ccc ddd  ggg
aaa  abb ccc  
www yyy hhh   
www yyy 333 yyy ooo hyy

당신은 그것을 사용할 수 있습니다

awk -F'[ ]' '{OFS=" ";for(i=1;i<=NF;i++){if($i==""){$i="N/A"}};print}' infile.txt

또는 탭으로 구분된 경우:

awk -F'\t' '{OFS="\t";for(i=1;i<=NF;i++){if($i==""){$i="N/A"}};print}' infile.txt

DOS/Windows 생성 파일에 주의하세요. Excel에서는 캐리지 리턴을 제거해야 합니다.

cat infile.txt | tr -d '\r' | awk -F'[ ]' '{OFS=" ";for(i=1;i<=NF;i++){if($i==""){$i="N/A"}};print}'

아마도 이는 문제에 정확히 맞지 않을 수도 있지만 많은 사용자에게 유용할 수 있습니다.

관련 정보