Como imprimir uma coluna específica para um arquivo se a condição for vista em vários arquivos?

1

Eu tenho um monte de arquivos (totalmente 2181 arquivos; anacovis2_1_summary_betai_reg.out ~ anacovis2_2181_summary_betai_reg.out ) como abaixo:

anacovis2_2_summary_betai_reg.out
anacovis2_3_summary_betai_reg.out
anacovis2_4_summary_betai_reg.out
anacovis2_5_summary_betai_reg.out
anacovis2_6_summary_betai_reg.out
anacovis2_7_summary_betai_reg.out
.
.
.
anacovis2_2179_summary_betai_reg.out
anacovis2_2180_summary_betai_reg.out
anacovis2_2181_summary_betai_reg.out

e cada arquivo é assim:

 COVARIABLE MRK M_Pearson SD_Pearson BF(dB) Beta_is SD_Beta_is eBPis
  1       1    -0.00974041     0.21914544   -10.86437924    -0.00058189     0.00694111     0.03003007
  1       2     0.08603974     0.19711939    -1.27963044     0.00381909     0.00953539     0.16192245
  1       3    -0.02912035     0.20260353   -12.60498743    -0.00146066     0.00633105     0.08749265

Eu quero passar por cada arquivo (1 a 2181) e se a primeira coluna (COVARIABLE) é igual a "1" imprima apenas a última coluna e salve-a em um arquivo separado (eu quero salvar a saída de cada arquivo arquivo em um arquivo separado).

Como faço isso em awk ou qualquer outra sugestão?

    
por Anna1364 10.09.2017 / 02:51

2 respostas

4

Isso deve ser feito facilmente apenas com awk .

awk '($1==1){print $NF>FILENAME"_new"}' anacovis2_{1..2181}_summary_betai_reg.out

Isso verificará se a primeira coluna foi igual a 1 $1==1 e, em seguida, imprimirá a última coluna $NF no novo arquivo com o mesmo formato FILENAME, mas terminará com _new , portanto os arquivos de saída serão FILENAME_new .

Para ler todos os 2181 arquivos, usamos parâmetro de expansão de chave aqui.

    
por 10.09.2017 / 05:08
1

A solução simples é:

for((i=1;i<2182;i++)); do
    file_in="anacovis2_${i}_summary_betai_reg.out"
    file_out="awk_output_${i}"
    awk '$1==1 { print $NF }' "$file_in" >"$file_out"
done

Uma solução mais rápida pode ser abrir os arquivos de entrada e saída com awk , para que seja necessário apenas um awk em vez de 2181 ...

    
por 10.09.2017 / 03:00