0

我有一个 csv 文件,其第二列中有链接,在每个链接的第 3 列中,我想插入他们的域名。我知道有一个 AWK 命令可以做到这一点:

echo http://news.blogs.cnn.com/2013/04/15/explosions-near-finish-of-boston-marathon/?hpt=hp_t1 | awk -F/ '{print $3}'

我想在每个 URL 的第三列中获得结果。我尝试在 R 中这样做,但没有奏效,还有其他方法可以做到这一点吗?例如通过终端?

编辑:或者,我怎样才能在 system() 调用中插入一个变量?所以,变量 a 有我的 URL,我想调用:

system("echo 'a' | awk -F/ '{print $3}'")
4

1 回答 1

0

我认为 OP 想知道如何通过在系统调用中插入变量来使用 awk 或从 R 中剪切。

一种方法是使用sprintf构建将 feed 的命令system

a <- "echo http://news.blogs.cnn.com/2013/04/15/explosions-near-finish-of-boston-marathon/?hpt=hp_t1"

### with Awk
cmd <- sprintf("echo %s | awk -F/ '{print $3}'", a)
system(cmd, intern = TRUE)
## [1] "news.blogs.cnn.com"


### Using cut
cmd2 <- sprintf("echo %s | cut -d/ -f3", a)
system(cmd2, intern = TRUE)
## [1] "news.blogs.cnn.com"

默认情况下system未矢量化,因此如果您有一列包含多个 url,则不能直接应用相同的方法。

所以你需要先“矢量化”这个system函数

system_vect <- Vectorize(system, vectorize.args = "command", USE.NAMES = FALSE)

b <- "http://www.r-bloggers.com/some-common-approaches-for-analyzing-likert-scales-and-other-categorical-data/"

cmd3 <- sprintf("echo %s | awk -F/ '{print $3}'", c(a, b))
system_vect(cmd3, intern = TRUE)
## [1] "news.blogs.cnn.com" "www.r-bloggers.com"


system(cmd3, intern = TRUE)
## [1] "news.blogs.cnn.com"
于 2013-07-02T11:37:14.597 回答