使用 awk 命令拆分文件



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

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上出现问题?

嗯.. 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来获得更大的优雅。 :-(

wc -l < 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 足够聪明,可以在使用它之前修剪数字中的空格。

最新更新