
두 번째 열의 내용을 두 개의 열로 분할해야 합니다 file
. 예를 들면 다음과 같습니다.
Id allele id2
30 TC 12
211 GG 12
327 AA 13
688 TC 15
760 TT 18
868 CC 90
출력은 다음과 같아야 합니다.
Id allele1 allele2 id2
30 T C 12
211 G G 12
327 A A 13
688 T C 15
760 T T 18
868 C C 90
답변1
그리고 awk
:
awk 'NR==1{$2=$2"1 "$2"2"} NR!=1{split($2,a,""); $2=a[1]" "a[2];}1' file
NR==1
첫 번째 행에만 적용$2=...
:두 번째 필드를 제목으로 다시 포맷합니다.allele1 allele2
NR!=1
다른 모든 라인에 적용됩니다.split($2,a,"")
$2
배열의 두 번째 필드 분할a
$2=a[1]" "a[2];
: 두 개의 분할 값을 사용a[1]
하고 두 번째 필드의 형식을 다시 지정합니다a[2]
.
1
마지막 조건이 true이고awk
전체 행(작동)이 인쇄됩니다.
열에 나열하려면 이것을 사용하십시오 awk ... | column -t
. 출력은 다음과 같습니다.
Id allele1 allele2 id2
30 T C 12
211 G G 12
327 A A 13
688 T C 15
760 T T 18
868 C C 90
답변2
여기 또 다른 것이 있습니다 sed
:
sed '1!s/ *./&\t/;t
s/a.*e/&1 &2/
' <infile >outfile
실제를 사용해야 할 수도 있습니다.<탭>\t
여기에 사용된 이스케이프 문자 대신 문자 를 사용하세요.
이 방법은 열이 공백으로 구분된 경우에 작동합니다. 만약 그들이 실제로<탭>문자는 열을 나누므로 약간 변경해야 합니다.
sed '1!s/\t./&\t/;t
s/a.*e/&1 &2/
' <infile >outfile
...텍스트가 필요할 수 있다는 이전 참고 사항과 동일<탭>백슬래시 이스케이프를 대체합니다 \
.
Id allele1 allele2 id
30 T C 12
211 G G 12
327 A A 13
688 T C 15
760 T T 18
868 C C 90
답변3
$ cat file|sed -e 's,\([^ ]*\)[ ]*\(.\)\(.\),\1 \2 \3,' -e '1 s/a llele/allele1 allele2/'
Id allele1 allele2 id2
30 T C 12
211 G G 12
327 A A 13
688 T C 15
760 T T 18
868 C C 90
답변4
펄 사용:
perl -lane '$,=" ";@F[1]=~s/./$& /;print(@F)' in
cat in
30 TC 12
211 GG 12
327 AA 13
688 TC 15
760 TT 18
868 CC 90
% perl -lane '$,=" ";@F[1]=~s/./$& /;print(@F)' in
30 T C 12
211 G G 12
327 A A 13
688 T C 15
760 T T 18
868 C C 90