Это должно работать и не требует дополнительного grep. Серийные данные извлекаются из datfile и добавляются в csv файл, все в одном скрипте.
#!/bin/bash
line=12
awk -v line=$line 'BEGIN{FS=":"}NR==FNR{if ($1 ~ /System serial number/) \
{sn=$2;nextfile} else {next}}{FS=",";if (FNR==line) $0=$1 FS $2 FS sn}1' datfile cvsfile
Теперь мы видим, что записывающее приложение отрубается, потому что (я полагаю) оно не может записывать на диск достаточно быстро.
Ну, оно не должно вот так просто взять и отрубиться! Я не думаю, что какая-либо файловая система гарантирует пропускную способность записи в условиях, близких к 100% заполненности. Ваше приложение плохо спроектировано с самого начала :(. Но, возможно, вы сможете его исправить... следующим шагом будет проверить, скомпилировано ли оно с отладочными символами, и попытаться получить трассировку стека, чтобы увидеть, где произошел segfault, и работать в обратном направлении.
Из недавно предоставленной информации похоже, что вы сталкиваетесь с проблемами производительности из-за того, что файловая система пытается поддерживать разумную дефрагментацию при заполнении почти на 100%. Я бы попробовал увеличить агрессивность процесса удаления, чтобы он пытался сохранить раздел на 25% свободного места или около того.