programing tip

Linux의 텍스트 파일에서 공백을 쉼표로 바꾸기

itbloger 2020. 12. 27. 10:25
반응형

Linux의 텍스트 파일에서 공백을 쉼표로 바꾸기


몇 개의 텍스트 파일 (에서 출력 sar) 을 편집하고 CSV 파일로 변환해야합니다.

sed 또는 awk 함수 (Linux의 쉬운 쉘 스크립트)를 사용하여 모든 공백 (아마도 출력의 숫자 사이에있는 탭)을 변경해야합니다.

누구든지 나를 도울 수 있습니까? 내가 사용한 모든 명령은 파일을 전혀 변경하지 않았습니다. 나는 시도했다 gsub.


tr ' ' ',' <input >output 

필요한 경우 각 공백을 쉼표로 대체합니다. 필요한 경우 SET1 (공백)에 나열된 반복 문자의 각 입력 시퀀스를 해당 문자의 단일 발생으로 대체하는 -s 플래그 (스퀴즈 반복)로 패스를 만들 수 있습니다. 캐릭터.

대체 탭 이후에 사용되는 스퀴즈 반복 사용 :

tr -s '\t' <input | tr '\t' ',' >output 

다음과 같이 시도하십시오.

sed 's/[:space:]+/,/g' orig.txt > modified.txt

문자 클래스 [: space :]는 모든 공백 (공백, 탭 등)과 일치합니다. 예를 들어 단일 문자를 바꾸려면 공간 만 사용하세요.

편집 : 실제로 [: space :] 캐리지 리턴을 포함하므로 원하는 작업을 수행하지 못할 수 있습니다. 다음은 탭과 공백을 대체합니다.

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

의지대로

sed 's/[\t ]+/,/g' orig.txt > modified.txt

이 모든 과정에서 공백으로 구분 된 파일의 항목에 유지하려는 자체 공백이 포함되지 않도록주의해야합니다. 두 단어.


입력 파일을 보지 않고 추측 만

awk '{$1=$1}1' OFS=","

다른 파일로 리디렉션하고 필요에 따라 이름을 바꿉니다.


다음과 같은 것은 어떻습니까?

cat texte.txt | sed -e 's/\s/,/g' > texte-new.txt

(예, 쓸모없는 catting 및 piping이 있습니다. <를 사용하여 파일에서 직접 읽을 수도 있습니다. cat을 먼저 사용하여 파일의 내용을 출력하고 그 후에야 sed를 명령 줄에 추가했습니다)

편집 : @ ghostdog74가 주석에서 지적했듯이 고양이 / 파이프가 필요하지 않습니다. sed에 파일 이름을 지정할 수 있습니다.

sed -e 's/\s/,/g' texte.txt > texte-new.txt

"texte.txt"가 다음과 같은 경우 :

$ cat texte.txt
this is a text
in which I want to replace
spaces by commas

다음과 같은 "texte-new.txt"가 표시됩니다.

$ cat texte-new.txt
this,is,a,text
in,which,I,want,to,replace
spaces,by,commas

나는 이전 파일을 새 파일로 바꾸지 않을 것입니다 (올바르게 기억하면 sed -i로 수행 할 수 있습니다. @ ghostdog74가 말했듯이 이것은 즉시 백업 생성을 허용합니다) : 유지하는 것이 현명 할 수 있습니다 , 보안 조치 ( "texte-backup.txt"와 같은 이름으로 이름을 변경해야하는 경우에도)


이 명령은 작동합니다.

sed "s/\s/,/g" < infile.txt > outfile.txt

출력을 새 파일로 리디렉션해야합니다. 입력 파일은 제자리에서 변경되지 않습니다.


sed는 이것을 할 수 있습니다 :

sed 's/[\t ]/,/g' input.file

콘솔로 전송됩니다.

sed -i 's/[\t ]/,/g' input.file

파일을 제자리에서 편집합니다.


다음은 파일을 제자리에서 편집하는 Perl 스크립트입니다.

perl -i.bak -lpe 's/\s+/,/g' files*

연속 공백은 단일 쉼표로 변환됩니다.
각 입력 파일은 .bak로 이동됩니다.

다음 명령 줄 옵션이 사용됩니다.

  • -i.bak 내부 편집 및 .bak 복사본 만들기

  • -p 입력 파일의 모든 줄을 순환하고 자동으로 줄을 인쇄합니다.

  • -l 처리하기 전에 줄 바꿈을 제거하고 나중에 다시 추가합니다.

  • -e Perl 코드 실행


임의의 일련의 공백 문자 (탭, 공백)를 하나의 쉼표로 바꾸려면 다음을 사용하십시오.

sed 's/[\t ]+/,/g' input_file > output_file

또는

sed -r 's/[[:blank:]]+/,/g' input_file > output_file

일부 입력 행에 중복되어 쉼표로 변환 할 필요가없는 선행 공백 문자가 포함 된 경우 먼저 해당 문자를 제거한 다음 나머지 공백 문자를 쉼표로 변환해야합니다. 이러한 경우 다음을 사용하십시오.

sed 's/ +//' input_file | sed 's/[\t ]+/,/g' > output_file

ReferenceURL : https://stackoverflow.com/questions/1271222/replace-whitespace-with-a-comma-in-a-text-file-in-linux

반응형