我试图将文件拆分为训练数据集和测试数据集。我有这个错误
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 足够聪明,可以在使用它之前修剪数字中的空格。