한 열의 값을 다른 열의 문자열로 바꾸는 방법은 무엇입니까?

한 열의 값을 다른 열의 문자열로 바꾸는 방법은 무엇입니까?

다음과 같은 파일이 있습니다.

head new_fileset_prefix_17.sampleT
ID_1 ID_2 missing
0 0 0
0 fam1000_G1000 0
0 fam1001_G1001 0
0 fam1003_G1003 0
0 fam1005_G1005 0
0 fam1009_G1009 0
...

나는 다음과 같은 출력을 얻고 싶습니다.

ID_1 ID_2 missing
0 0 0
fam1000 G1000 0
fam1001 G1001 0
fam1003 G1003 0
fam1005 G1005 0
fam1009 G1009 0
...

답변1

단일 문자열에 대해 간단한 s/old/new를 수행하는 가장 좋은 도구는 sed입니다.

$ sed 's/^[0-9]* \([^_]*\)_/\1 /' file
ID_1 ID_2 missing
0 0 0
fam1000 G1000 0
fam1001 G1001 0
fam1003 G1003 0
fam1005 G1005 0
fam1009 G1009 0

하지만 awk에서는 다음과 같이 할 수 있습니다.

$ awk '/^[0-9]/ && sub(/_/," ",$2){$0=$2 OFS $3} 1' file
ID_1 ID_2 missing
0 0 0
fam1000 G1000 0
fam1001 G1001 0
fam1003 G1003 0
fam1005 G1005 0
fam1009 G1009 0

답변2

awk 'NR<3 { print; next; }; { split($2,a,"_"); print a[1] " " a[2] " " $3; }' file

관련 정보