쉘 스크립트를 사용하여 텍스트 파일의 처음 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
더 간단한 방법입니다. sed
k번째 발생 및 모든 후속 사례를 변경하는 확장이 제공됩니다.
따라서 모든 공백을 쉼표로 바꾸고, 네 번째 발생 이후에는 쉼표를 공백으로 바꾸십시오.
예:
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