2012-03-02 13 views
7

Chcę połączyć język awk i R. Chodzi o to, że mam zestaw plików * .txt w określonym katalogu i że nie znam długości nagłówka z plików. W niektórych przypadkach muszę pominąć 25 linii, podczas gdy w innych muszę pominąć 27 itd. Więc chcę wpisać komendy awk, aby uzyskać liczbę linii do pominięcia. Raz mam tę wartość, mogę rozpocząć przetwarzanie danych z R.Łączenie poleceń R + awk + bash

Ponadto w pliku R Łączę R bash więc mój kod wygląda następująco:

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

Gdzie i jak mogę wpisać moje polecenie awk. Dzięki!

Próbowałem zrobić to, co powiedziałeś mi o poleceniach awk i nadal dostaję błąd. Program nie rozpoznaje mojego polecenia, więc nie mogę wprowadzić liczby wierszy, aby przejść do mojej funkcji. Tu jest mój kodu:

** nLinia < - pasta ('$ (grep -n 'M/S' import_file | awk -F ":" '{print $ 1}')')

nLinia < - skan (rurka (nline), cicho = T) **

Szukam wzoru m/s w pierwszej kolumnie, aby wiedzieć, gdzie mam tekst nagłówka. Używam R pod w7.

Odpowiedz

8

Poza odrobiną Vincenta korzystania system("awk ...", intern=TRUE), można również użyć funkcji pipe() który jest częścią zwykłych połączeń tekstowych:

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> 

Tutaj wysyłam polecenie do awk, a następnie odczytuję wszystkie dane wyjściowe z awk, które mogą być również pojedynczymi wierszami:

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, Dziękuję za miłą odpowiedź Dirk sir. – RavinderSingh13

6

Można użyć system uruchomić zewnętrznego programu z R.

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

Ale gdzie go używać, w moim skrypcie lub w moim pliku SAmpleStatus.r. A jak działa? Czy możesz być nieco bardziej precyzyjny? Dzięki – JPV

+0

Możesz użyć go w swoim skryptu R, aby wywołać skrypt awk (oczywiście musisz zastąpić '--version'); zwraca wynik twojego skryptu awk jako wektor ciągów znaków. –