Есть 2 возможности. smartctl -c
перечислит возможности устройства, включая такие строки, как
Short self-test routine
recommended polling time: ( 1) minutes.
Extended self-test routine
recommended polling time: ( 48) minutes.
Таким образом, вы можете просто прочитать их и поспать необходимое короткое или долгое время.
Во-вторых, во время выполнения теста та же самая опция -c
будет отображать текущий статус любого теста, например:
Offline data collection status: (0x03) Offline data collection activity
is in progress.
Self-test execution status: ( 247) Self-test routine in progress...
70% of test remaining.
Total time to complete Offline
data collection: ( 44) seconds.
Таким образом, вы можете опрашивать каждые несколько минут и ждать, пока оставшееся время вернется к 0, а другие поля получат свои окончательные значения:
Offline data collection status: (0x02) Offline data collection activity
was completed without error.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: ( 0) seconds.
Рассмотрим следующий awk-скрипт:
awk 'BEGIN { IFS=OFS="\t" }
NR==1 { print "sample_1" OFS "sample_2" OFS "sample_3" OFS "info" }
NR >1 { four=$4
for(i=5; i <= NF; i++) four=four"|"$i
print $1 OFS $2 OFS $3 OFS four }' input
Сценарий состоит из трех разделов:
BEGIN
--перед тем, как скрипт прочитает любой ввод, он устанавливает разделитель полей ввода -и вывода -как TAB. NR==1
--это переписывает заголовок, как вы показали. NR >1
--это сворачивает поля четыре и далее для объединения с вкладками (OFS ). Он делает это, инициализируя новое значение полем #4; затем он перебирает оставшиеся поля и добавляет к их значениям символ вертикальной черты. После завершения цикла он печатает заново собранную строку. Быстро и грязно с GNU sed, при условии, что ни одна из ваших строк не имеет пробелов в конце:
$ sed -E -e 's/\s+/\|/4g' -e '1s/\S*$/info/' file
sample_1 sample_2 sample_3 info
52 59 80 wild|animal|herbe|small
25 65 71 pet|insect
Если в строках есть пробелы в конце, вы можете сначала удалить их:
sed -E -e 's/ +$//' -e 's/\s+/\|/4g' -e '1s/\S*$/info/' file
Пробовал с помощью приведенной ниже команды, все работает нормально
awk 'NR >1{$4=$4$5$6$7;$5=$6=$6=$7="";print $0}' filename| sed '1i sample_1 sample_2 sample_3 info '| awk '{printf "%s%10s%10s%30s\n",$1,$2,$3,$4}'
выход
sample_1 sample_2 sample_3 info
52 59 80 wildanimalherbesmall
25 65 71 petinsect