각 줄의 첫 번째 단어와 일치하도록 분할 명령의 출력 이름을 어떻게 바꿀 수 있습니까?

각 줄의 첫 번째 단어와 일치하도록 분할 명령의 출력 이름을 어떻게 바꿀 수 있습니까?

다음과 같은 input.txt 파일(4줄)이 있습니다.

GGTAACC_MIR4095P   USP7    MKRN1   TSHZ3   EIF2C1  SRSF8   CAMK2G      ARID4B
GCM_TINF2            MORF4L1 ABHD16A ZNF274  C7orf43 SNX33
chr9q34         MRPL41  OR5C1   LOC138159       GBGT1
REACTOME_SIGNALING_BY_NOTCH1            HDAC6   HDAC5   MAMLD1 

이 파일을 4개의 파일(원래 파일은 39줄)로 분할하여 각각 줄의 첫 번째 단어로 이름이 지정된 4개의 파일을 얻으려면 어떻게 해야 합니까? GGTAACC_MIR4095P.txt GCM_TINF2.txt chr9q34.txt REACTOME_SIGNALING_BY_NOTCH1.txt

지금까지 내가 시도한 것은 다음과 같습니다.

split -d -a 2 -l 1 input.txt output_

이것은 내가 필요한 솔루션과는 거리가 멀다.

@steeldriver가 제안한대로 솔루션은 다음과 같습니다.

awk -F " " '{print >$1".txt"}' input.txt

답변1

밀러(https://github.com/johnkerl/miller) 사용

mlr --nidx --ifs ' ' --repifs unsparsify then put -q 'tee > $1.".txt", $*' input.txt

다음 네 가지 파일이 있습니다.

chr9q34.txt
GCM_TINF2.txt
GGTAACC_MIR4095P.txt
REACTOME_SIGNALING_BY_NOTCH1.txt

답변2

고환을 구현하려면 다음 명령을 사용하십시오. 정상적으로 작동합니다.

count=`wc -l filename| awk '{print $1}'`
praveen@praveen:~$
praveen@praveen:~$ for ((i=1;i<=$count;i++)); do j=`sed -n ''$i'p' filename`;awk -v i="$i" 'NR == i {print $0}' filename >$j.txt;done
praveen@praveen:~$ 

관련 정보