Объединение команд R + awk + bash - PullRequest
7 голосов
/ 02 марта 2012

Я хочу объединить язык awk и R. Дело в том, что у меня есть набор файлов * .txt в указанном каталоге, и я не знаю длину заголовка из файлов. В некоторых случаях я должен пропустить 25 строк, в то время как в других я должен пропустить 27 и т. Д. Поэтому я хочу ввести несколько команд awk, чтобы получить количество пропускаемых строк. Получив это значение, я могу начать обработку данных с R.

Кроме того, в файле R я объединяю R an bash, поэтому мой код выглядит следующим образом:

!/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)

Где и как я могу ввести свою команду awk. Спасибо!

Я пытался сделать то, что вы сказали мне о командах awk, и я все еще получаю сообщение об ошибке. Программа не распознает мою команду, и поэтому я не могу ввести количество строк, чтобы перейти к моей функции. Вот мой код:

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

nline <- сканирование (труба (nline), тихо = T) **</p>

Я ищу шаблон м / с в первом столбце, чтобы узнать, где у меня есть текст заголовка. Я использую R под w7.

Ответы [ 2 ]

10 голосов
/ 02 марта 2012

Помимо подсказки Винсента об использовании system("awk ...", intern=TRUE), вы также можете использовать функцию pipe(), которая является частью обычных текстовых соединений:

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> 

Здесь я передаю команду в awkзатем прочитайте все выходные данные из awk, которые также могут быть одной строкой:

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> 
6 голосов
/ 02 марта 2012

Вы можете использовать system для запуска внешней программы из R.

system("gawk --version", intern=TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...