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