각 필드는 한 줄을 차지합니다.

각 필드는 한 줄을 차지합니다.

텍스트 파일이 있습니다.

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"열에서 행을 자동으로 계산"을 의미합니다.

관련 정보