我试图将文件拆分为训练数据集和测试数据集。我有这个错误
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上的问题吗?
答案 0 :(得分:2)
.. 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
获得更大的优雅。 :-)
答案 1 :(得分:1)
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足够聪明,可以在使用数字之前修剪数字中的空格。