파일의 개별 숫자 사이에 공백을 삽입하는 방법은 무엇입니까?

파일의 개별 숫자 사이에 공백을 삽입하는 방법은 무엇입니까?

내 데이터는 다음과 같습니다.

$ cat input
1212103122
1233321212
0000022221

출력이 다음과 같기를 원합니다.

$ cat output
1 2 1 2 1 0 3 1 2 2
1 2 3 3 3 2 1 2 1 2
0 0 0 0 0 2 2 2 2 1

나는 시도했다:

sed -i 's// /g' input > output

하지만 작동하지 않습니다.

어떤 제안이 있으십니까?

답변1

이것은 나에게 효과적입니다.

sed 's/./& /g' input > output

$ cat input
1212103122
1233321212
0000022221

$ cat output
1 2 1 2 1 0 3 1 2 2 
1 2 3 3 3 2 1 2 1 2 
0 0 0 0 0 2 2 2 2 1 

답변2

당신을 위한:

sed 's/\(.\{1\}\)/\1 /g' input > output

변경 사항을 그대로 저장하려면 다음을 수행하세요.

sed -i 's/\(.\{1\}\)/\1 /g' input

작동 방식:

s/\(.\{1\}\)/\ /g1자마다 공백이 추가됩니다.

예를 들어 다음과 같은 출력 파일을 원하는 경우:

12 12 10 31 22
12 33 32 12 12
00 00 02 22 21

내 답변을 다음과 같이 편집할 수 있습니다.

sed -i 's/\(.\{2\}\)/\1 /g'

따라서 2자마다 공백이 추가됩니다.

또한 는 /\1 /와 동일하며 /&공백을 추가합니다. 예를 들어 다음 세 개를 추가합니다: /\1 /또는 /& /. 더 많은 옵션을 사용할 수 있습니다. Sed는 매우 강력한 도구입니다.

또한예, @Law29에서 언급했듯이 제거하지 않으면 각 줄 끝에 공백이 남게 됩니다. 따라서 공백이 추가될 때 제거하려면 s/ $//주어진 솔루션 끝에 a를 추가하면 됩니다. :

sed 's/./& /g; s/ $//'

이게 도움이 되길 바란다.

답변3

-i파일을 그 자리에서 편집하도록 선택할 수 있습니다 . 이로 인해 올바른 솔루션을 찾지 못할 수도 있습니다.

sed문제는 허용되지 않는 빈 문자열을 일치시키려고 한다는 것입니다 . 대신, 임의의 문자와 일치하고 이를 동일한 문자 뒤에 공백이 오는 문자로 바꿉니다. 이렇게 하면 각 줄 끝에 공백이 남게 되며, 다른 sed를 사용하여 제거할 수 있습니다.

$ cat input 
1212103122
1233321212
0000022221
$ sed -e 's/./& /g' -e 's/ $//' input > output
$ cat output
1 2 1 2 1 0 3 1 2 2
1 2 3 3 3 2 1 2 1 2
0 0 0 0 0 2 2 2 2 1
$ 

답변4

옵션 은 다음과 같습니다 awk.

awk -F '' '{$1=$1}1' input > output

작동 원리는 다음과 같습니다.

  • 빈 필드 구분 기호를 설정하여 -F ''입력 레코드(행)를 단일 문자로 분할합니다.

  • 평가를 통해 $1=$1기본 출력 필드 구분 기호(공백)를 사용하여 레코드를 강제로 다시 작성합니다.

  • 1true이므로 결과를 인쇄하세요.


Perl에서도 비슷한 트릭이 있습니다:

perl -F'' -alne 'print join " ", @F' input > output

표시하려면:

$ awk -F '' '{$1=$1}1' input
1 2 1 2 1 0 3 1 2 2
1 2 3 3 3 2 1 2 1 2
0 0 0 0 0 2 2 2 2 1

관련 정보