두 개의 열을 하나로 병합하려고 합니다. 내 데이터세트는 다음과 같습니다.
RSID1 RSID2
rs7475652 rs7475652
rs7475652 rs7918643
rs7475652 rs3125034
rs7475652 rs3750730
rs7475652 rs883728
rs7475652 rs4881500
rs7475652 rs3853288
rs7475652 rs4881504
rs7475652 rs2242271
rs7475652 rs7099607
rs7475652 rs10904597
rs7475652 rs3207775
보시다시피 일부 중복된 값이 있습니다. 먼저 열 2를 열 1과 병합한 다음 uniq
명령을 사용하여 중복 항목을 제거 할 계획입니다 . 이 두 열을 병합한 다음 중복된 열을 제거하고 싶습니다.
다음은 이 예에서 예상되는 출력의 첫 번째 부분입니다.
rs7475652
rs7475652
rs7475652
rs7918643
rs7475652
rs3125034
rs7475652
rs3750730
rs7475652
rs883728
답변1
이 질문을 추측한다는 것은 원하는 출력이 다음과 같다는 것을 의미합니다.
RSID1
RSID2
rs7475652
rs7475652
rs7475652
rs7918643
rs7475652
rs3125034
rs7475652
rs3750730
rs7475652
rs883728
rs7475652
rs4881500
rs7475652
rs3853288
rs7475652
rs4881504
rs7475652
rs2242271
rs7475652
rs7099607
rs7475652
rs10904597
rs7475652
rs3207775
그 다음에
awk '{print $1 "\n" $2}'
그렇게 할 것이다. awk는 또한 OP가 수행하려는 다음 단계를 처리하여 출력을 고유하게 만들 수 있습니다. 이를 수행하는 코드는 출력이 쌍별로 고유해야 하는지(각 행이 이전 행과 다름) 또는 전역적으로 고유해야 하는지(각 행이 모든 이전 행과 다름)에 따라 달라집니다.
답변2
@icarus awk
실제로 로 바꾸면
\n
다음과 같은 다른 도구를 사용하여 동일한 목표를 달성할 수 있습니다.
cat file | tr ' ' '\n' # Naughty me! See UUOC below.
또는
sed "s/ /\n/g" file
이는 공백으로 구분된 2개 이상의 요소 행을 단일 "열"로 줄이거나 더 정확하게는 각 요소를 자체 행에 배치합니다.
댓글에서 지적한 추가 공간에 관해서는 ...
sed "s/ /\n/g" file | tr -d ' '
추가적인 복잡성을 도입하면 awk
모든 것이 더욱 매력적이게 되지만 이 경우에는 다음과 같은 방법도 가능합니다.
grep -Po "[^ ]+" file
이 환상적인 상을 주신 @edmorton과 팀, 그리고 이 모든 것을 가능하게 해준 내 친구와 동료들에게 감사 인사를 전하고 싶습니다. 내 강아지, 스팟 등도 잊지 마세요. 그것은 내 ZX-80과 1980년부터 싱크대에 우아하게 쌓여 있던 중고 스푼 옆에 자부심을 가질 것입니다.
@edmorton 댓글 아래에서 홍보됨
tr ' ' '\n' < file
답변3
파일 이름이 a.txt이고 구분 기호가 \t인 것을 고려하면 다음 명령을 사용할 수 있습니다.
cat a.txt | awk -F"\t" '{print $1 "\n" $2}' > b.txt
이제 b.txt에 예상 출력이 포함됩니다.