열을 두 개로 나누기

열을 두 개로 나누기

하나의 열로 구성된 파일이 있는데 이를 두 개의 열로 분할해야 합니다. 나는 시도했다column명령이 작동하지 않는 것 같습니다.

123-zyx
234-yxw
345-xwv
456-wvu
567-vut
678-uts

답변1

tr간단히 유틸리티를 사용할 수 있습니다 .

tr '-' $' ' < filename

산출:

123 zyx
234 yxw
345 xwv
456 wvu
567 vut
678 uts

당신은 sed이것을 좋아할 수 있습니다 :

sed 's/-/ /g' < filename

산출:

123 zyx
234 yxw
345 xwv
456 wvu
567 vut
678 uts

답변2

다음 옵션을 사용할 수 있습니다 -s.

column -s- -t file

답변3

표시된 예제 입력 데이터가./in그 다음에...

<in >out tr -- - \\t

...두 개 줄게<탭>이름이 지정된 파일의 구분된 열./out.

그러나 상황에 따라 tr텍스트를 사용하고 싶을 수도 있습니다.<탭>마지막 두 문자를 대체할 문자입니다. 실제로 마지막 두 구분 기호를 원하는 다른 구분 기호로 자유롭게 바꿔야 합니다.

답변4

Bash에만 해당:

# VERSION 1

while IFS=$'-' read -a line
do
    printf '%s %s\n' ${line[@]}
done < infile > outfile

또는...

# VERSION 2

main(){ 
  local IFS=$'-\n'
  local a=( $(<infile) )
  printf '%s %s\n' ${a[@]} > outfile
}

main

또는...

# VERSION 3

while IFS= read -r line
do
  printf '%s\n' "${line/-/ }"
done < infile > outfile

하지만 조심하세요. 보세요.이 게시물대용량 파일에 적용을 고려하고 계시다면.


재미삼아 중간 크기 파일에 대해 몇 가지 벤치마크를 실행해 보세요. 결과는 다음과 같습니다. "tr"이 최선의 선택이고 그 다음이 sed, 그 다음 awk입니다. 최고의 Bash는 버전 2입니다(tr보다 625배 느리고 82배 더 많은 메모리를 사용합니다). 이에 비해 sed는 tr보다 7.5배 느리고, awk는 tr보다 9배 느립니다.

$ stat -c %s bigdata.txt && wc -l bigdata.txt
1439952
179994 bigdata.txt

# tr '-' $' ' < "$1" > tr.txt

CPU TIME AND RESOURCE USAGE OF './tr bigdata.txt'
VALUES ARE THE AVERAGE OF ( 10 ) TRIALS

CPU, sec :    0.02
CPU, pct :   97.10
RAM, kb  : 1390.00

# sed 's/-/ /g' < "$1" > sed.txt

CPU TIME AND RESOURCE USAGE OF './sed bigdata.txt'
VALUES ARE THE AVERAGE OF ( 10 ) TRIALS

CPU, sec :    0.15
CPU, pct :   98.90
RAM, kb  : 1386.80

# awk 'BEGIN{FS="-"} ; { print $1,$2 }' "$1" > awk.txt

CPU TIME AND RESOURCE USAGE OF './awk bigdata.txt'
VALUES ARE THE AVERAGE OF ( 10 ) TRIALS

CPU, sec :    0.18
CPU, pct :   98.80
RAM, kb  : 1402.00

# BASH: VERSION 1

CPU TIME AND RESOURCE USAGE OF './bash_1 bigdata.txt'
VALUES ARE THE AVERAGE OF ( 10 ) TRIALS

CPU, sec :   16.35
CPU, pct :   99.00
RAM, kb  : 1486.40

# BASH: VERSION 2

CPU TIME AND RESOURCE USAGE OF './bash_2 bigdata.txt'
VALUES ARE THE AVERAGE OF ( 10 ) TRIALS

CPU, sec :   12.51
CPU, pct :   99.40
RAM, kb  : 114002.40

# BASH: VERSION 3

CPU TIME AND RESOURCE USAGE OF './bash_3 bigdata.txt'
VALUES ARE THE AVERAGE OF ( 10 ) TRIALS

CPU, sec :   15.45
CPU, pct :   99.00
RAM, kb  : 1484.00

관련 정보