쉘 스크립트를 사용하여 텍스트 파일의 처음 3단어 끝에 쉼표를 추가해야 합니다.

쉘 스크립트를 사용하여 텍스트 파일의 처음 3단어 끝에 쉼표를 추가해야 합니다.

쉘 스크립트를 사용하여 텍스트 파일의 처음 3단어 끝에 쉼표를 추가해야 합니다.

예: file.txt

jan Feb Mar  Chennai India
jan Feb Mar  Hyderabad India
jan Feb Mar  Bangalore India

예상되는 출력은 다음과 같습니다.

jan,Feb,Mar,  Chennai India
jan,Feb,Mar,  Hyderabad India
jan,Feb,Mar,  Bangalore India

답변1

$ awk -F'  ' '{ gsub(" ", ",", $1); $1 = $1 "," } 1' OFS='  ' file.txt
jan,Feb,Mar,  Chennai India
jan,Feb,Mar,  Hyderabad India
jan,Feb,Mar,  Bangalore India

이는 입력이 두 개의 이중 공백으로 구분된 열로 해석될 수 있다는 사실을 활용합니다. 첫 번째 열의 공백을 쉼표로 바꾸고 그 뒤에 쉼표를 추가합니다.

답변2

이를 수행하는 방법에는 여러 가지가 있습니다.

sed는 다음을 수행할 수 있습니다:

$ cat <your-file> | sed -r 's/(\w+)\s(\w+)\s(\w+)(.*)$/\1, \2, \3,\4/'

독서도 그 일을 합니다:

$ while read c1 c2 c3 rest; do echo $c1, $c2, $c3, $rest; done < <your-file>

awk도 그 일을 할 수 있습니다:

$ cat <your-file> | awk '{ printf "%s, %s, %s, ", $1, $2, $3; for (i = 4; i <= NF; i++) { printf "%s ", $i; } print ""}'

답변3

또한 다음을 시도해보세요:

awk '{print $1","$2","$3", " substr($0, index($0,$4))}' file.txt

산출:

jan,Feb,Mar, Chennai India
jan,Feb,Mar, Hyderabad India
jan,Feb,Mar, Bangalore India

답변4

sed더 간단한 방법입니다. sedk번째 발생 및 모든 후속 사례를 변경하는 확장이 제공됩니다.

따라서 모든 공백을 쉼표로 바꾸고, 네 번째 발생 이후에는 쉼표를 공백으로 바꾸십시오.

예:

 sed -i -e "s/ /,/g" -e 's/,/ /4g' file.txt

산출:

jan,Feb,Mar, Chennai India
jan,Feb,Mar, Hyderabad India
jan,Feb,Mar, Bangalore India

관련 정보