2012-03-02 10 views
7

Quiero combinar lenguaje awk y R. El caso es que tengo un conjunto de archivos * .txt en un directorio específico y que no sé la longitud del encabezado de los archivos. En algunos casos, tengo que saltear 25 líneas, mientras que en otros tengo que omitir 27, etc. Por lo tanto, quiero escribir algunos comandos awk para obtener el número de líneas para omitir. Una vez que tengo este valor, puedo comenzar a procesar los datos con R.Combinación de comandos R + awk + bash

Por otra parte, en el archivo R R combino una fiesta así que mi código es el siguiente:

!/usr/bin/env Rscript 
... 
argv <- commandArgs(T) 
**error checking...** 
import_file <- argv[1] 
export_file <- argv[2] 
**# your function call** 
format_windpro(import_file, export_file) 

¿Dónde y cómo puedo tipo I mi comando awk. ¡Gracias!

Intenté hacer lo que me dijiste sobre los comandos awk y sigo recibiendo un error. El programa no reconoce mi comando y, por lo tanto, no puedo ingresar el número de líneas para saltar a mi función. Aquí está mi código:

** nline < - pasta ('$ (grep -n 'm/s' import_file | awk -F ":" '{print $ 1}')')

nline < - scan (pipe (nline), quiet = T) **

Busco el patrón m/s en la primera columna para saber dónde tengo el texto de mi cabecera. Yo uso R debajo de w7.

Respuesta

8

Además indicio de usar system("awk ...", intern=TRUE) de Vincent, también puede utilizar la función pipe() que forma parte de las conexiones de texto habituales:

R> sizes <- read.table(pipe("ls -l /tmp | awk '!/^total/ {print $5}'")) 
R> summary(sizes) 
     V1   
Min. :  0 
1st Qu.:  482 
Median : 4096 
Mean : 98746 
3rd Qu.: 13952 
Max. :27662342 
R> 

Aquí estoy canalizando un comando en awk y luego leo toda la salida desde awk, que también podría ser una sola línea:

R> cmd <- "ls -l /tmp | awk '!/^total/ {sum = sum + $5} END {print sum}'" 
R> totalsize <- scan(pipe(cmd), quiet=TRUE) 
R> totalsize 
[1] 116027050 
R> 
+0

++ ve, Gracias por una agradable respuesta Dirk señor. – RavinderSingh13

6

Puede utilizar system para ejecutar un programa externo de R.

system("gawk --version", intern=TRUE) 
+0

Pero, ¿dónde lo uso, en mi secuencia de comandos o en mi archivo SAmpleStatus.r? ¿Y cómo funciona? ¿Puedes ser un poco más preciso? Gracias – JPV

+0

Puede usarlo en su script R para llamar a su script awk (debe reemplazar '--version', por supuesto); devuelve el resultado de su script awk, como un vector de cadenas. –

Cuestiones relacionadas