2014-02-13 3 views
-1

У меня есть три файла, как показано ниже.Присоединение содержимого трех файлов к одному

a1.txt

>1BS3 
MDEKRRAQH 
>2ERT 
>3a56 
NEVE 

a2.txt

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

a3.txt

>1BS3 
>2ERT 
PDSSM 
>3a56 
ILSKASDYIQELRQSNHR 

Я хотел бы объединить вышеуказанные три файла в другой файл anew.txt. Как я могу это сделать?

Желаемая выход

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

Я хотел бы получить выход в указанном выше порядке.

+1

Примечание эти AWK ответы используют ассоциативные массивы. При использовании итерации ключей массива нет неотъемлемого порядка. Если это важно для вас, сообщите нам об этом. –

+0

Большое спасибо за ваш комментарий. Для меня важен порядок. – user3305627

ответ

1

Эта 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 

Это говорит, если первый символ ">", установите селектор записи (мой "Сель" переменная) к текущей строке и игнорировать остальную обработку. Если строка не начинается с «>», добавьте текущую строку к текущей выбранной строке. В конце напечатайте все.

Пример вывода:

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

Не знаю, почему, бит, я получаю весь вывод в длинной строке, а не 6, как в моем сообщении. – Jotne

+1

Обнаружена ошибка, вам нужно удалить «\» в '/^\> /' и установить ее в '/ ^> /' – Jotne

+0

Mmmm, weird! Не знаю, почему это было бы, но спасибо за тестирование. –

Смежные вопросы