Linux에서 특정 파일 열에 공백을 추가하는 방법

Linux에서 특정 파일 열에 공백을 추가하는 방법

다음 형식의 1000줄이 포함된 텍스트 파일이 있습니다.

001122 abc def ghi
334455 xyz aaa bbb
667788 ccc ccc ddd

Linux 명령을 사용하여 일부 열에 공백을 추가하여 이 형식으로 변환하려면 어떻게 해야 합니까?

00 11 22 abc def ghi
33 44 55 xyz aaa bbb
66 77 88 ccc ccc ddd

답변1

순진하지만 직접적:

$ sed 's/\(..\)\(..\)\(..\)/\1 \2 \3/' file
00 11 22 abc def ghi
33 44 55 xyz aaa bbb
66 77 88 ccc ccc ddd

즉, 각 줄의 두 문자의 처음 세 세트를 일치시키고 수집하고 대체 문자열에 공백을 삽입하여 구분합니다.

멋지지만 생각이 필요합니다.

$ sed 's/../ &/3; s/../ &/2' file
00 11 22 abc def ghi
33 44 55 xyz aaa bbb
66 77 88 ccc ccc ddd

첫 번째 표현식은 ..각 줄의 세 번째 항목을 공백으로 바꾸고 그 뒤에 ..일치하는 내용이 옵니다. 다시 말하지만, 두 번째 게임입니다.

답변2

모든 UNIX 시스템의 모든 쉘에서 awk를 사용하고 해당 열의 문자에 관계없이 변경하려는 열을 지정할 수 있습니다.

$ awk -v c=1 '{gsub(/../,"& ",$c); sub(/ $/,"",$c)}1' file
00 11 22 abc def ghi
33 44 55 xyz aaa bbb
66 77 88 ccc ccc ddd

$ awk -v c=2 '{gsub(/../,"& ",$c); sub(/ $/,"",$c)}1' file
001122 ab c def ghi
334455 xy z aaa bbb
667788 cc c ccc ddd

$ awk -v c=3 '{gsub(/../,"& ",$c); sub(/ $/,"",$c)}1' file
001122 abc de f ghi
334455 xyz aa a bbb
667788 ccc cc c ddd

답변3

간단한 sed 명령만 사용하면 됩니다( filename실제 파일에 따라 변경됨).

sed -E 's|([0-9]{2})([0-9]{2})([0-9]{2})[[:blank:]]*(.*)|\1 \2 \3 \4|g' filename

filename소스 파일을 제자리( )로 변경 하려면 다음 -i옵션을 전달하세요.

sed -i -E 's|([0-9]{2})([0-9]{2})([0-9]{2})[[:blank:]]*(.*)|\1 \2 \3 \4|g' filename

설명하다:

([0-9]{2})두 자리 그룹을 3번 매칭하세요

(.*)다른 모든 항목(예: 모든 문자)과 일치합니다.

[[:blank:]]*탭을 포함하여 공백 문자와 일치합니다.

\1패스가 \4일치하는 그룹입니다.

이는 GNU에서만 작동한다는 점에 유의하세요 sed. 거의 모든 주요 Linux 배포판은 GNU Linux와 함께 제공됩니다. macOS를 사용하는 경우 sed로 사용할 수 있는 GNU sed 설치가 없으면 sed는 BSD sed입니다 gsed.

답변4

여기에 입력하기엔 너무 게으른데,

sed -E "s/([0-9]{2})/\1 /g; s/ +/ /g" file1

각 숫자 쌍 뒤에 공백을 추가하고 여러 공백을 단일 공백으로 줄입니다.

아니면 더 게으른 것일 수도 있습니다.

sed 's/./& /4;s/./& /2' file1

관련 정보