awk를 사용하여 열 분할

awk를 사용하여 열 분할

아래와 같은 파일이 있습니다. 9열의 값은 **로 연결됩니다.

chrXV   234346  234546  snR81   +       SNR81   chrXV   234357  0.0003015891774815342**0.131826816475   +
chrXV   234346  234546  snR81   +       SNR81   chrXV   234385  0.0002208827994288481**0.0118547789578  +
chrXV   234346  234546  snR81   +       SNR81   chrXV   234396  0.0001799579220002955**0.00583993781634 +
chrXV   234346  234546  snR81   +       SNR81   chrXV   234410  0.003451057940295026**0.00352844797952  +

2개의 값을 별도의 열로 가질 수 있는 출력을 원합니다. awk에서 이를 수행하는 방법.

이것이 내가 원하는 출력입니다. 출력의 첫 번째 줄을 표시합니다.

chrXV   234346  234546  snR81   +   SNR81   chrXV   234357  0.0003015891774815342   0.131826816475  +

답변1

사람들이 왜 cat을 사용하여 파일을 awk로 파이프하는지 잘 모르겠지만 tr 응답은 한 문자만 다른 문자로 변환하므로 모든 문자 *space.

간단한 awk 솔루션

awk -F"**" '$1=$1' OFS="\t" file 

모든 필드 사이의 탭의 경우

awk 'sub(/\*\*/," "){$1=$1}1' OFS="\t" file

아직 하나 있어요

awk 'gsub(/(*| )+/,"\t")' file

sed 명령

sed 's/[* ]\+/\t/g' file

tr 명령

tr -s '* ' '\t'  < file

답변2

이상한 일이라고 해야 하나? cat file | tr '**' ' '**를 공백 세 개로 바꾸면 어떨까요?

답변3

cat text.txt  |awk '{ split($9,a , "**"); printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",$1,$2,$3,$4,$5,$6,$7,$8, a[1], a[2],$10); }'

출력은 다음과 같습니다

chrXV   234346  234546  snR81   +   SNR81   chrXV   234357  0.0003015891774815342   0.131826816475  +
chrXV   234346  234546  snR81   +   SNR81   chrXV   234385  0.0002208827994288481   0.0118547789578 +
chrXV   234346  234546  snR81   +   SNR81   chrXV   234396  0.0001799579220002955   0.00583993781634    +
chrXV   234346  234546  snR81   +   SNR81   chrXV   234410  0.003451057940295026    0.00352844797952    +

답변4

awk -F'**' 'BEGIN{OFS="   ";} {print $1,$2}' file

'**'를 구분 기호로 사용하고 세 개의 공백을 출력 구분 기호로 설정합니다.

관련 정보