텍스트 파일이 있습니다.
a aa aaa b bb bbb c cc ccc
d dd ddd e ee eee f ff fff
g gg ggg h hh hhh i ii iii
j jj jjj
어떻게 처리하고 다음과 같은 2열 파일을 얻을 수 있습니까?
a aa
aaa b
bb bbb
c cc
ccc d
dd ddd
e ee
eee f
ff fff
g gg
ggg h
hh hhh
i ii
iii j
jj jjj
또는 다음과 같은 3열 파일:
a aa aaa
b bb bbb
c cc ccc
d dd ddd
e ee eee
f ff fff
g gg ggg
h hh hhh
i ii iii
j jj jj
나는 awk 솔루션을 선호하지만 다른 솔루션도 환영합니다.
답변1
각 필드를 행과 열 뒤에 배치합니다.
각 필드는 한 줄을 차지합니다.
티
tr -s ' ' '\n' < infile
grep
grep -o '[[:alnum:]]*' infile
sed
sed 's/\s\+/\n/g' infile
또는 더 휴대성이 뛰어납니다.
sed 's/\s\+/\
/g' infile
앗
awk '$1=$1' OFS='\n' infile
또는
awk -v OFS='\n' '$1=$1' infile
기둥 모양의
반죽
2개 열의 경우:
... | paste - -
3개 열의 경우:
... | paste - - -
등.
sed
2개 열의 경우:
... | sed 'N; s/\n/\t/g'
3개 열의 경우:
... | sed 'N; N; s/\n/\t/g'
등.
매개변수
... | xargs -n number-of-desired-columns
xargs
인쇄 에 사용되는 경우 /bin/echo
옵션처럼 보이는 데이터가 echo
옵션으로 해석된다는 점에 유의하세요.
앗
... | awk '{ printf "%s", $0 (NR%n==0?ORS:OFS) }' n=number-of-desired-columns OFS='\t'
섭외
... | pr -at -number-of-desired-columns
또는
... | pr -at -s$'\t' -number-of-desired-columns
열(autogen 패키지에서)
... | columns -c number-of-desired-columns
일반적인 출력:
a aa aaa
b bb bbb
c cc ccc
d dd ddd
e ee eee
f ff fff
g gg ggg
h hh hhh
i ii iii
j jj jjj
답변2
$ sed -E 's/\s+/\n/g' ip.txt | paste - -
a aa
aaa b
bb bbb
c cc
ccc d
dd ddd
e ee
eee f
ff fff
g gg
ggg h
hh hhh
i ii
iii j
jj jjj
$ sed -E 's/\s+/\n/g' ip.txt | paste - - -
a aa aaa
b bb bbb
c cc ccc
d dd ddd
e ee eee
f ff fff
g gg ggg
h hh hhh
i ii iii
j jj jjj
답변3
와일드카드에서 알 수 있듯이 이는 파일이 올바른 형식인 경우에만 작동합니다. 왜냐하면 쉘은 특수 문자를 와일드카드로 해석하지 않고 기본 단어 분리 규칙에 만족하기 때문입니다. 귀하의 파일이 이 테스트를 "통과"할 것이라는 의심이 든다면 이 방법을 사용하지 마십시오.
한 가지 가능성은 다음을 사용하여 printf
이 작업을 수행 하는 것입니다.
printf '%s\t%s\n' $(cat your_file)
그러면 의 내용이 토큰화되고 your_file
쌍을 이루고 탭으로 인쇄됩니다. 추가 열을 얻으려면 %s
더 많은 형식 문자열을 사용할 수 있습니다 printf
.
답변4
BSD rs
(재형성) 유틸리티:
$ rs 0 2
a aa aaa b bb bbb c cc ccc
d dd ddd e ee eee f ff fff
g gg ggg h hh hhh i ii iii
j jj jjj
[Ctrl-D][Enter]
a aa
aaa b
bb bbb
c cc
ccc d
dd ddd
e ee
eee f
ff fff
g gg
ggg h
hh hhh
i ii
iii j
jj jjj
0 2
예좋아요그리고목록. 지정은 0
"열에서 행을 자동으로 계산"을 의미합니다.