
질문이 있습니다. 어리석은 질문일 수도 있지만 해결할 수는 없습니다. 파일의 열을 일치시키고 파일을 병합하는 것이 매우 간단하다는 것을 알고 있지만 불행히도 너무 많은 명령을 시도한 후에도 목표를 달성할 수 없습니다.
파일이 2개 있어요
파일 1:
BP2808 1.83684448966078 10.7449438228544 27.7057862093578 1.4123961881793E-07 4.26390957350344E-06
BP1319 2.75272032616902 8.74039675296892 27.5666097653874 1.51776372331745E-07 4.46142652354102E-06
dps 1.47015471230894 10.7061416142689 27.1494663323484 1.88317176247083E-07 5.39359707353824E-06
fusA -1.38504972563843 11.8361844791496 27.0016273796008 2.03284239943838E-07 5.67671240043168E-06
BP1320 2.67552497792458 8.77604324182685 26.5184193030292 2.61037278592442E-07 7.11167415092092E-06
두 번째 파일에는 2개의 열이 있습니다.
파일 2:
BP2808 hypothetical protein
BP1319 Memebrane protein
dps DNA-binding protein
fusA elongation factor G
원하는 출력:
BP2808 1.83684448966078 10.7449438228544 27.7057862093578 1.4123961881793E-07 4.26390957350344E-06 hypothetical protein
BP1319 2.75272032616902 8.74039675296892 27.5666097653874 1.51776372331745E-07 4.46142652354102E-06 Memebrane protein
dps 1.47015471230894 10.7061416142689 27.1494663323484 1.88317176247083E-07 5.39359707353824E-06 DNA-binding protein
fusA -1.38504972563843 11.8361844791496 27.0016273796008 2.03284239943838E-07 5.67671240043168E-06 elongation factor G
BP1320 2.67552497792458 8.77604324182685 26.5184193030292 2.61037278592442E-07 7.11167415092092E-06 NA
나는 awk, 붙여넣기를 시도했습니다. 결합했지만 원하는 출력을 얻지 못했습니다. 제 기억이 맞다면 파일 3의 마지막 열에 있는 문자열 사이에 공백이 있기 때문인 것 같습니다.
paste File1 File2 | awk '{$2=""; print}' > Testing
awk -F\t '{getline f1 <"File1" ;print f1,$2}' OFS=, File2 > Testing
join -t'\t' <(sort File1) <(sort File2) > Testing
인터넷에서 많이 검색해 보면 더 많은 내용이 있습니다. 누구든지 나를 도울 수 있다면 시간이 많이 절약될 것입니다.
답변1
사용
join -t $'\t'
join
백스페이스 이스케이프 특수 문자는 해석되지 않습니다. \t
실제로는 유지됩니다(탭과 동일하지 않음). \t
vs와 매우 유사합니다(아날로그가 없는 것처럼 동작함 echo '\t'
echo -e '\t'
join
echo
-e
). 따라서 쉘이 다음을 사용하여 문자를 해석하도록 해야 합니다.ANSI-C 인용문 $'...'
.
awk
~ 할 것이다특수 문자를 해석하므로 다음을 사용할 수 있습니다.
awk -F'\t'
하지만
awk -F\t
\\t
그러나 let the shellinterpret를 사용할 수는 있지만 \\
제 생각에는 인용문이 더 읽기 쉽습니다.
후자의 명령의 경우 쉘은 (Try: ) \t
로 해석됩니다 . 쉘이 해석하지 않도록 인용하십시오.t
echo \t