gawk colunas de vários arquivos e adicionar a um único arquivo de texto

0

Eu tenho 50 conjuntos de arquivos contendo 9 colunas (amostra mostrada na figura em anexo).

Osarquivossãonomeadoscomo(1)inputfile_1.assoc.logistic(2)inputfile_2.assoc.logisticetc….

OsvaloresnasColunas1,2e3sãoidênticosemtodosos50arquivos

Euqueroconseguirascolunas7,8e9detodosos50arquivoseadicionaraumúnicoarquivo.txt,paraficarassim(ocampodeveserseparadoportabeascolunas7,8e9devemserrotuladascomomostrado)

Eutenhousadoogreploop(mostradoabaixo)paraextrairascolunasindividualmente,salvarcomoarquivodetexto,importaroarquivo.txtparaostataparamesclá-las,masestádemorandobastante(jáquetenhomaisde7milhõesdelinhas)eprecisodissoparaváriasanálises.

foriin$(seq150);dogawk-F" " '{print $2, $7, $8, $9}' inputfile_${i}.assoc.logistic >>/mnt/jw01-aruk-home01/projects/jia_mtx_gwas_2016/common_files/output/imputed_dataset/all_50_mi_datasets/acr30R_vs_acr30NR_combined_coefficients/outputfile_${i}.txt
done

Isso pode ser mais eficiente e incorporado em um loop de shell?

    
por Sam 06.01.2017 / 12:10

1 resposta

0

não testado devido à falta de dados de entrada:

gawk '
    BEGIN {FS = OFS = "\t"}
    BEGINFILE {match(FILENAME, /inputfile_([0-9]+).assoc.logistic/, m)}
    FNR == 1 {
        key = $1 OFS $2 OFS $3
        data[key] = data[key] OFS $7"_"m[1] OFS $8"_"m[1] OFS $9"_"m[1]
        next
    }
    {
        key = $1 OFS $2 OFS $3
        data[key] = data[key] OFS $7 OFS $8 OFS $9
    }
    END {
        for (key in data) {
            print key data[key]
        }
    }
' inputfile_*.assoc.logistic > outputfile

Como estou interagindo com chaves hash para enviar os dados, a saída aparecerá em ordem aleatória

    
por 06.01.2017 / 12:52

Tags