расщепление файла с помощью команды awk - PullRequest
0 голосов
/ 06 октября 2018

Я пытался разделить файл на набор обучающих данных и набор тестовых данных.У меня есть эта ошибка

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 голосов
/ 07 октября 2018

Хорошо ... 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,: -)

0 голосов
/ 07 октября 2018

Как выглядит вывод из 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 достаточно умен, чтобы урезать пробелы от числа перед его использованием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...