Как выполнить вызов awk со смешанными кавычками в R? - PullRequest
0 голосов
/ 29 июня 2018

Мне нужно запустить awk изнутри R до добавить пробелы в конце каждой строки файла , чтобы обеспечить его постоянную фиксированную ширину. Как это:

$ cat -e file
1$
12$
123$
1234$
$ awk '{printf "%-10s\n", $0}' file | cat -e
1         $
12        $
123       $
1234      $
12345     $

Однако у меня возникают проблемы с выполнением этого изнутри R. Как правильно экранировать системные вызовы изнутри R имеет дело с чем-то похожим, но, похоже, для меня это не работает.

> ' awk \'{printf "%-180s\n", $0}\' file '
[1] " awk '{printf \"%-180s\n\", $0}' file "
> system(' awk \'{printf "%-180s\n", $0}\' file ')
awk: cmd. line:1: {printf "%-180s
awk: cmd. line:1:         ^ unterminated string
awk: cmd. line:1: {printf "%-180s
awk: cmd. line:1:         ^ syntax error

Я тоже попробовал system(" awk '{printf \"%-180s\n\", $0}' file "), с точно такой же ошибкой. Я не уверен, почему это не удается, но, похоже, это связано со смешанными цитатами. Есть идеи, как сделать эту работу?

1 Ответ

0 голосов
/ 29 июня 2018

Идея верна, вам просто нужно убежать от \ в \n. Так как он обрабатывается printf() внутри awk, вам нужно экранировать его, чтобы трактовать буквально

system("awk '{printf \"%-10s\\n\",$0}' file")

или с переменной

awkcommand <- "awk '{printf \"%-10s\\n\",$0}' file"
system(awkcommand)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...