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
'programing tip' 카테고리의 다른 글
Angular.js ng-repeat 필터는 여러 값 중 하나를 갖는 속성 (값의 OR) (0) | 2020.12.27 |
---|---|
에 포스트 백 비활성화 (0) | 2020.12.27 |
TFS 소스 제어에 솔루션을 추가 할 때“Failed to create mapping”이 표시됨 (0) | 2020.12.27 |
객관식 Android Spinner (0) | 2020.12.27 |
과학적 표기법없이 SQL 서버에서 float를 varchar로 변환 (0) | 2020.12.27 |