Anexar la salida de cada iteración de un bucle al mismo en Bash -- bash campo con loops campo con wc campo con vcf-variant-call-format camp Relacionados El problema

append output of each iteration of a loop to the same in bash


0
vote

problema

Español

Tengo 44 archivos (2 para cada cromosoma) dividido en dos tipos: .vcf y .filtered.vcf. Me gustaría hacer un wc -l para cada uno de ellos en un bucle y agregar la salida siempre al mismo archivo. Sin embargo, me gustaría tener 3 columnas en este archivo: CHR [1-22], name="guest[{{ $cart->_id }}][comments]"0 de .vcf y name="guest[{{ $cart->_id }}][comments]"111 de .filtered.vcf.

He estado tratando de hacer un <form action="{{ route('cart.store') }}" method="post"> {{ csrf_field() }} <div class="panel panel-default text-left panel-booking1 panel-default-booking1"> @forelse($carts as $key => $cart) <div class="col-sm-4 col-sm-4-booking1 form-group {{ $errors->has('guest.*.sleeps') ? ' has-error' : '' }}"> <label>Sleep(s)</label> <select class="form-control form-control-booking1 jsBookCalSleep" name="guest[{{ $cart->_id }}][sleeps]"> <option value="">Choose Sleep(s)</option> @for($i = 1; $i <= 30; $i++) <option value="{{ $i }}" @if($i == $cart->sleeps) selected @endif>{{ $i }}</option> @endfor </select> @if ($errors->has('guest.*.sleeps')) <span class="help-block"><strong>{{ $errors->first('guest.*.sleeps') }}</strong></span> @endif </div> <div class="col-sm-4 col-sm-4-f-booking1 comment-booking1 col-sm-4-booking1"> <div class="form-group {{ $errors->has($inputComments) ? ' has-error' : '' }}"> <textarea id="comments_{{ $cart->_id }}" name="guest[{{ $cart->_id }}][comments]" class="form-control" rows="3" maxlength="300" placeholder="Comment...">{{ old($inputComments) }}</textarea> @if ($errors->has($inputComments)) <span class="help-block"><strong>{{ $errors->first($inputComments) }}</strong></span> @endif </div> </div> @empty <p>No bookings in your cart</p> @endforelse <div> <div id="btn-ground-2-booking1"> <button type="submit" class="btn btn-default-booking1 btn-default btn-sm btn-details btn-details-booking1"><span class="glyphicon glyphicon-credit-card" style="font-size: 14px;" aria-hidden="true"></span> Payment</button> </div> </div> </form> 12 independiente para cada archivo y pegar juntos las 2 salidas para cada uno de los cromosomas, pero esto obviamente no es muy eficiente, porque estoy generando mucho de archivos innecesarios. Estoy intentando este código para los 22 pares de archivos:

  name="guest[{{ $cart->_id }}][comments]"3  

Me gustaría tener un solo archivo de salida que contenga tres columnas:

  name="guest[{{ $cart->_id }}][comments]"4  

Se apreciará cualquier ayuda, muchas gracias de antemano :)

Original en ingles

I have 44 files (2 for each chromosome) divided in two types: .vcf and .filtered.vcf. I would like to make a wc -l for each of them in a loop and append the output always to the same file. However, I would like to have 3 columns in this file: chr[1-22], wc -l of .vcf and wc -l of .filtered.vcf.

I've been trying to do independent wc -l for each file and paste together columnwise the 2 outputs for each of the chromosomes, but this is obviously not very efficient, because I'm generating a lot of unnecessary files. I'm trying this code for the 22 pairs of files:

wc -l file1.vcf | cut -f 1 > out1.vcf wc -l file1.filtered.vcf | cut -f 1 > out1.filtered.vcf paste -d "\t" out1.vcf out1.filtered.vcf 

I would like to have just one output file containing three columns:

Chromosome    VCFCount    FilteredVCFCount chr1          out1        out1.filtered chr2          out2        out2.filtered 

Any help will be appreciated, thank you very much in advance :)

           
         
         

Lista de respuestas

0
 
vote
vote
La mejor respuesta
 
  printf "%s " *.filtered.vcf | cut -d. -f1 | sort | xargs -n1 sh -c 'printf "%s %s %s " "$1" "$(wc -l <"${1}.vcf")" "$(wc -l <"${1}.filtered.vcf")"' --    
  1. Lista de archivos separados de nueva línea de salida en el directorio
  2. Retire la extensión con corte (probablemente algo a lo largo de xargs -i basename {} .filtered.vcf sería más seguro)
  3. ¡Ordenalo (¡para una salida ordenada agradable!) (Probablemente algo a lo largo de sort -tr -k2 -n se clasificaría numéricamente y sería aún mejor).
  4. xargs -n1 para cada archivo Ejecute el script val r = new scala.util.Random val x = 1262284200 + r.nextInt((1546194600-1262284200)) 0
    1. val r = new scala.util.Random val x = 1262284200 + r.nextInt((1546194600-1262284200)) 1 - Salida con una cadena de formato personalizada ...
    2. val r = new scala.util.Random val x = 1262284200 + r.nextInt((1546194600-1262284200)) 2 - El nombre de archivo y ...
    3. val r = new scala.util.Random val x = 1262284200 + r.nextInt((1546194600-1262284200)) 3 - El conteo de líneas en el archivo .vcf y ...
    4. val r = new scala.util.Random val x = 1262284200 + r.nextInt((1546194600-1262284200)) 4 - El recuento de las líneas en el .filtered.vcf

Ejemplo:

  val r = new scala.util.Random val x = 1262284200 + r.nextInt((1546194600-1262284200)) 5  

Tener una mesa de aspecto agradable con encabezados, use val r = new scala.util.Random val x = 1262284200 + r.nextInt((1546194600-1262284200)) 6 :

  val r = new scala.util.Random val x = 1262284200 + r.nextInt((1546194600-1262284200)) 7  
 
printf "%s\n" *.filtered.vcf | cut -d. -f1 | sort | xargs -n1 sh -c 'printf "%s\t%s\t%s\n" "$1" "$(wc -l <"${1}.vcf")" "$(wc -l <"${1}.filtered.vcf")"' --  
  1. Output newline separated list of files in the directory
  2. Remove the extension with cut (probably something along xargs -i basename {} .filtered.vcf would be safer)
  3. Sort it (for nice sorted output!) (probably something along sort -tr -k2 -n would sort numerically and would be even better).
  4. xargs -n1 For each one file execute the script sh -c
    1. printf "%s\t%s\t%s\n" - output with custom format string ...
    2. "$1" - the filename and...
    3. "(wc -l <"${1}.vcf")" - the count the lines in .vcf file and...
    4. "$(wc -l <"${1}.filtered.vcf")" - the count of the lines in the .filtered.vcf

Example:

> touch chr{1..3}{,.filtered}.vcf  > echo > chr1.filtered.vcf ; echo  > chr2.vcf ;  >     printf "%s\n" *.filtered.vcf | >    cut -d. -f1 | >    sort | >    xargs -n1 sh -c 'printf "%s\t%s\t%s\n" "$1" "$(wc -l <"${1}.filtered.vcf")" "$(wc -l <"${1}.vcf")"' --  chr1    0   1 chr2    1   0 chr3    0   0 

To have nice looking table with headers, use column:

> .... | column -N Chromosome,VCFCount,FilteredVCFCount -t -o '    ' Chromosome    VCFCount    FilteredVCFCount chr1          0           1 chr2          1           0 chr3          0           0 
 
 
0
 
vote

tal vez intente esto.

  for chr in chr*.vcf; do     base=${chr%.vcf}     awk -v base="$base" 'BEGIN { OFS=" "             # Remove this to not have this pesky header line             print "Chromosome", "VCFCount", "FilteredVCFCount"             }         FNR==1 && n { p=n }         { n=FNR }         END { print base, p, n }' "$chr" "$base.filtered.vcf" done >counts.txt   

El script AWK muy simple simplemente recopila el número de línea más alto para cada archivo (por lo que básicamente realizamos el reembolso wc -l ) e imprime los números recolectados en el formato deseado. FNR es el número de línea en el archivo de entrada actual; Simplemente guardamos esto, y copiaremos el valor en p para mantener el valor guardado del archivo anterior en una variable aparte cuando cambiamos a un nuevo archivo (comenzando en la línea número 1).

La sustitución de parámetros de cáscara ${variable%pattern} Recupera el valor de variable con cualquier coincidencia de sufijo en pattern6 eliminado. (También hay ${variable#pattern} para eliminar un prefijo, y Bash tiene ## y %% para recortar la coincidencia de patrón más larga en lugar del más corto.) < / p>

Si la eficiencia es importante, probablemente podría refactorar todo el script en un solo script awk, pero de esta manera, todas las piezas son simples y con suerte comprensibles.

 

Maybe try this.

for chr in chr*.vcf; do     base=${chr%.vcf}     awk -v base="$base" 'BEGIN { OFS="\t"             # Remove this to not have this pesky header line             print "Chromosome", "VCFCount", "FilteredVCFCount"             }         FNR==1 && n { p=n }         { n=FNR }         END { print base, p, n }' "$chr" "$base.filtered.vcf" done >counts.txt 

The very simple Awk script just collects the highest line number for each file (so we basically reimplement wc -l) and prints the collected numbers in the desired format. FNR is the line number in the current input file; we simply save this, and copy the value to p to keep the saved value from the previous file in a separate variable when we switch to a new file (starting over at line number 1).

The shell parameter substitution ${variable%pattern} retrieves the value of variable with any suffix match on pattern removed. (There is also ${variable#pattern} to remove a prefix, and Bash has ## and %% to trim the longest pattern match instead of the shortest.)

If efficiency is important, you could probably refactor all of the script into a single Awk script, but this way, all the pieces are simple and hopefully understandable.

 
 

Relacionados problema

0  Ejecutar una matriz en varios archivos con diferentes archivos de salida Linux  ( Running an array on multiple files with different output files linux ) 
Me gustaría desglosar 8 archivos (que representan un cromosoma cada uno) que cada uno tiene aproximadamente 2 e9 líneas en aproximadamente 5 trozos de 4E8 lín...

-1  Código lento de Python para analizar el archivo VCF e insertar en la base de datos  ( Slow python code to parse vcf file and insert in database ) 
Tengo el siguiente código que se escribe para analizar el archivo VCF (Formato de llamada Variante): Código PYTHON: import vcf import psycopg2 datalist ...

1  Modificación de archivos VCF antes de convertir a BCF  ( Vcf files modification before converting to bcf ) 
Estoy agregando nuevos archivos VCF a un archivo BCF realizado anteriormente en el que se había establecido el campo ID en el VCF en CHR:POS:POS:REF:ALT ? ...

-1  Convertir VCF a FILE HAP, COMPSETE GENOTYPES  ( Convert vcf to hap file collapse genotypes ) 
Yo uso las fotos para hacer una pregunta. Tengo una archivo vcf . y una código r . Así es como se ve mi salida: salida Quiero que mi archivo de ...

-1  Dividir múltiples archivos de entrada en múltiples salidas mediante función dividida en Linux  ( Splitting multiple input files into multiple outputs using split function in lin ) 
Tengo 8 archivos que me gustaría dividir en 5 trozos por archivo. Normalmente haría esto individualmente, pero me gustaría correr esto como un bucle. Yo traba...

2  Cómo encontrar elementos de una matriz grande (1 millón de elementos) en otra matriz más grande (600 millones de elementos)  ( How to find elements of a large 1 million elements array in another larger arr ) 
Tengo un archivo muy grande (que contiene ID de DBSNP), que contiene 1 millón de filas, cada una que contiene una cadena única y otro archivo más grande (.vcf...

0  Comparando parte de una línea con todas las demás líneas en otro archivo en Python  ( Comparing part of a line with every other line in another file in python ) 
Estoy tratando de comparar una línea en un archivo y colocar cada línea correspondiente en otro archivo en un archivo de salida. Por ejemplo, aquí está el pri...

2  Extraer la posición de lectura del archivo BAM  ( Extract read position from bam file ) 
Tengo un archivo VCF que contiene varios SNPs y ahora quiero ver, si estos SNPs se distribuyen de manera uniforme sobre las lecturas del fichero bam de la que...

0  Docker No se puede localizar el archivo, incluso con la ruta correcta dada  ( Docker unable to locate file even with correct path given ) 
Estoy ejecutando un comando de largo docker args: - --isPresent=true / false 9 Pero esto está dando un error core0 ¿Por qué no es Docker que e...

0  ¿Cómo solucionar este error al instalar bcftools en Mac? Problema con C: [Ploidy.O] Error 1  ( How to fix this error when installing bcftools on mac problem with c ploidy o ) 
Estoy tratando de instalar BCFTools en la Mac para el manejo de los archivos VCF, pero tengo algunos problemas al realizar una instalación correcta de esto, e...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos