2014-02-13 6 views
-1

다음과 같이 세 개의 파일이 있습니다.세 파일의 내용을 하나의 파일로 합치십시오.

>1BS3 
>2ERT 
PDSSM 
>3a56 
ILSKASDYIQELRQSNHR 
내가 다른 파일 anew.txt에 위의 세 가지 파일을 결합하고자하는

a3.txt

>1BS3 
QSKGGILS 
>2ERT 
INNWIV 
>3a56 
RRRRDK 

a2.txt a1.txt

>1BS3 
MDEKRRAQH 
>2ERT 
>3a56 
NEVE 

. 어떻게해야합니까?

원하는 출력

>1BS3 
MDEKRRAQHQSKGGILS 
>2ERT 
INNWIVPDSSM 
>3a56 
NEVERRRRDKILSKASDYIQELRQSNHR 

나는 위의 순서로 출력을 좀하고 싶습니다.

+1

주에서 볼 수있는 키를 유지합니다. 배열의 키를 반복하는 동안 고유 한 순서는 없습니다. 이것이 중요하다면 저희에게 알려주십시오. –

+0

귀하의 의견에 진심으로 감사드립니다. 고유 한 순서가 중요합니다. – user3305627

답변

1

이 AWK 프로그램 키의 순서를 유지한다. 그것은 숫자 인덱스 배열이 AWK의 답변 연관 배열을 사용

awk ' 
    /^>/ { 
     key = $0 
     if (!(key in val)) { 
      keys[++n] = key 
      val[key] = "" 
     } 
     next 
    } 
    { val[key] = val[key] $0 } 
    END { 
     for (i=1; i<=n; i++) { 
      print keys[i] 
      print val[keys[i]] 
     } 
    } 
' a{1,2,3}.txt 
>1BS3 
MDEKRRAQHQSKGGILS 
>2ERT 
INNWIVPDSSM 
>3a56 
NEVERRRRDKILSKASDYIQELRQSNHR 
+0

대단히 고마워요. – user3305627

0

awk 어떻게해야이 같은

awk '!/^>/ {a[s]=a[s] $0} {s=$0} END {for (i in a) print i RS a[i]}' a1 a2 a3 
>2ERT 
INNWIVPDSSM 
>1BS3 
MDEKRRAQHQSKGGILS 
>3a56 
NEVERRRRDKILSKASDYIQELRQSNHR 
2

뭔가 :

첫 번째 문자가 ">", 레코드 선택기를 설정하면 말한다
awk '/^>/{sel=$0;next}{a[sel]=a[sel]$0}END{for (i in a) print i RS a[i]}' a[123].txt 

(내 "SEL"변수) 현재 행에 추가하고 나머지 처리는 무시합니다. 줄이 ">"로 시작하지 않으면 현재 선택된 줄에 현재 줄을 추가하십시오. 결국, 모든 것을 인쇄하십시오.

샘플 출력 :

>3a56 
NEVERRRRDKILSKASDYIQELRQSNHR 
>1BS3 
MDEKRRAQHQSKGGILS 
>2ERT 
INNWIVPDSSM 
+0

이유는 모르겠지만, 비트는 모든 게시물을 긴 줄에서 가져오고 내 게시물처럼 6이 아닙니다. – Jotne

+1

오류가 발견되면'/^\> /'의 "\"를 제거하고'/ ^>/'로 설정해야합니다. – Jotne

+0

음, 이상! 그 이유는 모르겠지만 테스트 해 주셔서 감사합니다. –

관련 문제