Как вырезать столбцы из всех файлов в каталоге и создавать новые файлы с одинаковыми именами? - PullRequest
0 голосов
/ 18 марта 2019

У меня есть 32 файла в одном каталоге.

Формат каждого файла следующий -

Образец гена A ген B

Имя countA countsB

Я хочу вырезать первые два столбца и вставить их в 32 файла для geneA, а первый и третий столбцы - в файлы для geneB.

То, что я пробовал, было cut -f1,2 * > *_geneA.txt, где* в выводе был взят как символ.Есть ли способ сделать все это за один раз?

Спасибо заранее.

1 Ответ

1 голос
/ 18 марта 2019

Эта программа GNU awk (см. Комментарий @ EdMorton в комментариях) берет имя поля целевого файла из первой записи, создает файл на основе имени файла и имени поля и добавляет к нему поля. В приведенном ниже примере я использую данные примера дважды в файлах file1 и file2:

$ awk '
FNR==1 {                                # first record of each file
    for(i=2;i<=NF;i++)                  # iterate field names 
        f[i]=$i                         # and hash them to f
}
{                                       # for all records
    for(i=2;i<=NF;i++) {                # iterate all but first field
        file=FILENAME "_" f[i] ".txt"   # form the file name
        print $1,$i > file              # and print to it
    }
}' file1 file2

Посмотрим, что сделано:

$ ls -rt | tail -n 4 
file1_geneB.txt
file1_geneA.txt
file2_geneB.txt
file2_geneA.txt

Давайте посмотрим внутрь одного:

$ cat file1_geneA.txt
Sample geneA
Name countsA
...