用awk命令分割文件

时间:2018-10-06 08:52:20

标签: bash 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上的问题吗?

2 个答案:

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