【发布时间】:2018-02-21 02:36:27
【问题描述】:
我有一个包含数百万行的 CSV 文件。我想在 R 中打开文件之前打开与文件的连接并过滤不必要的行。详细来说,我想从第二行开始每隔 30 行导入一次。
我在一台 Windows 机器上操作。我知道以下命令在 Apple 上实现了预期的结果;但是,它在我的 Windows 机器上不起作用。
awk 'BEGIN{i=0}{i++;if (i%30==2) print $1}' < test.csv
在 R 中,如果我在 Apple 上运行这段代码,我会得到想要的结果:
write.csv(1:100000, file = "test.csv")
file.pipe <- pipe("awk 'BEGIN{i=0}{i++;if (i%30==2) print $1}' < test.csv")
res <- read.csv(file.pipe)
显然,我对 Windows CLI 一无所知,所以有人可以帮我将此 awk 命令翻译成 Windows 语言,并解释翻译如何达到预期的结果吗?
提前致谢!
更新:
所以我已经下载了 Git,并且已经能够使用 Git 命令行成功完成这个任务,但是我需要在 R 中实现它,因为我必须对数千个文件执行这个任务。有人知道如何让 R 通过 Git 运行这个命令吗?
【问题讨论】:
-
如果那是您正在寻找的东西,我想知道,但是像 cygwin 这样的工具可以为您提供 Windows 机器上的大部分 Linux/cmd 行功能。因此,如果这是一件一次性的事情,可能就是您所需要的全部
-
你所说的“windows cli”是什么意思?要么你安装了
awk(通过git-for-windows、cygwin(正如帕特里克提到的)或本机安装),或者你需要找到一个不同的程序。顺便说一句,短一点:awk 'NR%30==2'...我今天才找到this,巧合? -
一个更轻量级的解决方案是 git-for-windows,它包括
awk、sed和其他几个类似的很棒的小工具。 -
试试
system("C:/PROGRA~1/Git/usr/bin/awk.exe ...")。然后卸载并重新安装 git-for-windows 并启用“添加到路径”的第三个选项。然后关闭并重新启动 R。 -
只是建议
readr包。您可以读取文件的块,例如 10000 行,并对此子集进行过滤(任何类型的过滤)并将其添加到最终数据框中。readr函数在我看来非常快,读取块选项提供了在加载完整数据之前进行过滤的可能性。
标签: r windows awk command-line pipe