파일이 있다고 가정합니다.
파일 1 :
PAPER TEAM MANISH NISHA GARIMA JYOUTI ........etc
File2 내가 원하는 :
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
File1의 행에서 열로 변환
파일이 있다고 가정합니다.
파일 1 :
PAPER TEAM MANISH NISHA GARIMA JYOUTI ........etc
File2 내가 원하는 :
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
File1의 행에서 열로 변환
답변:
를 사용하여 tr
반복되는 각 공백 문자 ( )를 단일 줄 바꿈 (
\n
) 문자로 바꿉니다.
tr -s ' ' '\n'< infile > outfile
12 34 1 a # abcd-> 2 b $ # $ @ % 3 c @ 4 일 %
로에게 awk
우리가 할 수있는 :
awk '{ for (i=1; i<=NF; i++) RtoC[i]= (RtoC[i]? RtoC[i] FS $i: $i) }
END{ for (i in RtoC) print RtoC[i] }' infile
이것은 각각의 동일한 파일 번호 위치를 서로 결합하고 END
첫 번째 열의 첫 번째 행, 두 번째 열의 두 번째 행 등의 결과를 인쇄합니다. 물론 입력 파일은 메모리 크기로 제한됩니다.
grep을 통해 간단히 할 수 있습니다. 기본적으로 grep은 일치하는 내용을 별도의 줄 바꿈으로 인쇄합니다.
grep -oP '\S+' infile > outfile
또는
grep -o '[^[:space:]]\+' infile > outfile
grep
다음 fmt
명령을 사용할 수도 있습니다 .
~$ cat f
PAPER TEAM MANISH NISHA GARIMA JYOUTI
~$ fmt -1 f
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
와 GNU의 datamash :
$ datamash -W transpose <file
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
datamash
이 작업에 가장 적합한 도구 인 것처럼 보이지만 다른 도구를 사용할 수있는 방법은 매력적입니다!
다음을 사용하여이 작업을 수행 할 수도 있습니다 sed
.
$ sed -e 's/ */\n/g' file1 > file2
참고 : 단어에 공백이 포함 된 상황은 처리하지 않습니다.
\n
것은 개행 문자로 보이지 않습니다
당신은 또한 사용할 수 있습니다 sed
$ sed -i.bak s@' '@'\n'@g infile.txt
내가 사용하고 있습니다 @
대체 작동을위한 구분자로. 백업 파일도 생성됩니다. 백업이 필요없는 경우 .bak를 제거하십시오
$ sed -i s@' '@'\n'@g infile.txt
파이썬 버전 :
python -c "import sys;lines=[l.replace(' ','\n') for l in sys.stdin.readlines()];print(''.join(lines))" < input.txt > output.txt
이것은 <
파이썬의 stdin으로의 리디렉션 input.txt
을 output.txt
사용하고 >
리디렉션 을 사용하여 기록합니다 . one-liner 자체는 모든 줄에서 stdin
문자열 목록으로 읽습니다 . 여기서 모든 공백은 줄 바꿈으로 바뀌고 .join()
함수를 사용하여 전체 텍스트를 다시 작성 합니다.
연속 된 여러 공백을 .split()
줄 바꿈으로 바꾸는 것을 피하기위한 대체 방법은 줄을 단어 목록으로 나누는 것입니다. 그렇게하면 각 단어를 하나의 줄 바꿈으로 만 분리 할 수 있습니다.
python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt > output.txt
을 사용하여 xargs
( souravc의 답변 에서 도난당한 ) :
xargs -n 1 < File1 > File2
또는 약간의 재 포맷이 필요한 경우 필요에 따라 printf
형식 문자열을 사용하십시오 .
xargs printf '%s\n' < File1 > File2
내 해결책은 다음과 같습니다.
#!/bin/bash
cols=$(head -1 file.txt | wc -w)
for i in $(seq 1 $cols); do
cut -d ' ' -f$i file.txt | tr '\n' ' ' | sed s'/.$//'
echo
done