【问题标题】:Command line - Awk command for Windows命令行 - 适用于 Windows 的 awk 命令
【发布时间】: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,它包括 awksed 和其他几个类似的很棒的小工具。
  • 试试system("C:/PROGRA~1/Git/usr/bin/awk.exe ...")。然后卸载并重新安装 git-for-windows 并启用“添加到路径”的第三个选项。然后关闭并重新启动 R。
  • 只是建议readr 包。您可以读取文件的块,例如 10000 行,并对此子集进行过滤(任何类型的过滤)并将其添加到最终数据框中。 readr 函数在我看来非常快,读取块选项提供了在加载完整数据之前进行过滤的可能性。

标签: r windows awk command-line pipe


【解决方案1】:
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 上,awk 的程序行需要用双引号括起来。由于同一行上的其他双引号,它们被转义了。

也不需要输入文件之前的“

【讨论】:

    猜你喜欢
    • 2014-07-06
    • 2021-01-29
    • 1970-01-01
    • 2016-12-06
    • 2011-03-28
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多