2017-02-22 50 views
5

Od strony man:Co to jest przełącznik linii poleceń-ruby?

-a  Turns on auto-split mode when used with -n or -p. 
     In auto-split mode, Ruby executes 
       $F = $_.split 
     at beginning of each loop. 

Niektóre pytania przychodzą do głowy:

  • Co się dzieje, gdy -a jest używany bez -n lub -p?
  • Co to jest $F?
  • Co dzieje się na końcu pętli?
  • Jak kontrolować, która postać jest wybrana na split na?
  • W jaki sposób zamierza się używać -a?

Z innej reference page:

$F  The variable that receives the output from split when -a is specified. 
     This variable is set if the -a command-line option is specified 
     along with the -p or -n option. 

ja nadal nie jestem pewien, co przełącznik -a jest. Doceniłbym wyjaśnienie, ale doceniłbym kilka przykładów.

Niektóre rzeczy próbowałem:

$ echo foo_bar_bar | ruby -ae 
ruby: no code specified for -e (RuntimeError) 
$ echo foo_bar_bar | ruby -ap 
$ echo foo_bar_bar | ruby -ap '$_' 
ruby: No such file or directory -- $_ (LoadError) 

Odpowiedz

4

tryb Auto-split jest włączony z przełącznikiem -a. Umożliwia domyślne przetwarzanie tekstu.
W trybie auto-Split, rubin odczyta pliki podane jako argumenty lub stdin jednej linii na raz, i za każdym wierszu:

  1. automatycznie podzielić linię, $_, na pola według separatora pola (oznaczone flagą)
  2. przypisać wynik do zmiennej o nazwie $F
  3. wykonać czynności za pomocą wiersza polecenia.

Po przetworzeniu wszystkich linii program opuszcza lub wykonuje END block. Zobacz tę odpowiedź dla example.

tryb Auto-split jest przydatna do pracy z tabelarycznych pliki tekstowe, które mają wiele records (records są linie, chyba że record separator ulega zmianie) oraz liczbę ustalonych fields w każdej linii. Na przykład, rozważmy file z zawartością:

ADG:YUF:TGH 
UIY:POG:YTH 
GHJUR:HJKL:GHKIO 

Następnie ruby -F: -a -n -e 'puts $F[2]' file drukuje trzeciego pola dla każdej linii:

$ ruby -F: -a -n -e 'puts $F[2]' file 
TGH 
YTH 
GHKIO 

W tym przypadku -F: ustawia separator pól do :. $F to tablica, w której są dzielone pola po zapisie ($_). Akcje po -e są wykonywane dla każdej linii po jej podzieleniu.

Przełączniki cli są bardzo podobne do tych z perl. Cli perl czyni tę funkcję wygodniejszą, zobacz perldoc perlrun. Na przykład, ponieważ -a nie jest użyteczny bez -n (lub -p), w perl, -F niejawnie włącza -a, co z kolei umożliwia -n. Nie jest tak w przypadku ruby, wszystkie przełączniki muszą być jawnie przekazane. Przykłady przykładów ładnych rzeczy, które można wykonać przy takim przetwarzaniu, można znaleźć pod kątem awk one liners.

Również ruby CLI następujące konwencje unix przekazywania command-line options:

Tradycyjnie opcje wiersza polecenia UNIX składa się z myślnikiem, a następnie przez jeden lub więcej małych liter.

Więc -a i -nswitches i -eflag mogą być łączone w celu osiągnięcia tego samego rezultatu:

$ ruby -F: -ane 'puts $F[2]' file 
TGH 
YTH 
GHKIO 

Jeśli jest to ciekawe, sprawdzić niektóre inne ruby one liners.