【问题标题】:splitting file with awk command使用 awk 命令分割文件
【发布时间】:2018-10-07 12:16:08
【问题描述】:

我试图将文件拆分为训练数据集和测试数据集。我有这个错误

awk:无法打开文件 -v 源行号 1

命令行如下:

awk -v lines=$(wc -l < data/yelp/yelp_review.v8.csv) -v fact=0.80  'NR <= lines * fact {print > "train.txt"; next} {print > "val.txt"}'  data/yelp/yelp_review.v8.csv

有人告诉我为什么这是 macbook 上的问题吗?

【问题讨论】:

  • 尝试将路径 data/yelp/yelp_review.v8.csv 更正为其实际路径,例如 /data/yelp/yelp_review.v8.csv 一次?
  • 请创建minimal reproducible example,以便大家重现问题。另外,不要添加与问题无关的标签,例如您使用的两个 Python 标签。
  • 请在您的问题中添加示例输入和该示例输入所需的输出。
  • @RavinderSingh:它无法打开文件。它说“awk:无法打开文件/data/yelp/yelp_review.v8.csv”
  • @Ulrich:下次我会注意的。

标签: bash awk


【解决方案1】:

嗯.. miken32 已经确定了您的第一次尝试出了什么问题。我无法改进他对问题的解释。

我的建议是,与其让wc 提供您的行数,不如使用 awk 本身来完成这项工作。像这样的:

awk -v fact=0.8 'NR==FNR{lines++;next} FNR<=lines*fact{print>"train.txt";next} {print>"val.txt"}' "$file" "$file"

虽然我可能会这样写:

awk -v fact=0.8 'NR==FNR{lines++;next} {out="val.txt"} FNR<=lines*fact{out="train.txt"} {print > out}' "$file" "$file"

您可以决定是通过简洁还是避免next 来获得更高的优雅。 :-)

【讨论】:

  • 非常感谢。这真的很有帮助
【解决方案2】:

wc -l &lt; data/yelp/yelp_review.v8.csv 的输出是什么样的?大概是这样的吧?

      74

那么当你把它放到你的命令中会发生什么?

awk -v lines=     74 -v fact=0.80 ...

如您所见,这不会很好地解析。始终引用您使用的任何可变数据:

awk -v lines="$(wc -l < data/yelp/yelp_review.v8.csv)" -v fact=0.80 ...

Awk 足够聪明,可以在使用之前修剪数字中的空格。

【讨论】:

    猜你喜欢
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2020-10-27
    • 1970-01-01
    相关资源
    最近更新 更多