Как заменить значение 3-го столбца на основе значения 4-го столбца

Отвечая на вопрос заголовка, нет, результаты SMART сами по себе не вызывают беспокойства. Хотя на вашем диске есть несколько нечитаемых секторов, он перераспределит их из внутренних резервов при следующей записи. Прямо сейчас Reallocated_Event_Countсообщает вам, что только девять блоков флэш-памяти (, соответствующих 9 *2048 = 18432 секторам, как показано в Reallocated_Sector_Ct), были заменены резервами.

Если вы не хотите ждать, пока нечитаемые в данный момент сектора будут перезаписаны при нормальной работе системы, вы можете записать в них вручную, используя такие инструменты, как ddили hdparm, но это, конечно, не для слабаков. -сердцем (если вы ошибетесь при установке позиции записи, вы потеряете некоторые совершенно достоверные данные ).

Тем не менее, другие упомянутые вами симптомы, такие как невозможность идентификации диска при включении питания -, на самом деле могут указывать на то, что электроника выходит из строя. Чаще всего,эти проблемы возникают только из-за проблем с блоком питания или кабелями, поэтому попробуйте подключить диск к другому компьютеру или поменять блок питания.

SMART-тесты обычно не говорят вам, что с электроникой что-то не так, они в основном тестируют фактический носитель данных, а не контроллер.

0
13.09.2019, 18:25
2 ответа
awk -F ';;;;' -v 'OFS=;;;;' '$4 == "Y" { $3 = "UPDATE" } $4 == "N" { $3 = "NA" } { print; }' test.txt

с test.txt, как указано в вопросе, печатает

000092;;;;2004;;;;NA;;;;N
000098;;;;0086;;;;UPDATE;;;;Y

Как указано в вопросе, я предполагаю, что у вас действительно есть только 4 столбца, разделенных;;;;(4 точками с запятой ), а не 13 столбцов, разделенных;(одиночной точкой с запятой ). Так что этот скрипт не будет работать, если у вас есть строки с дополнительными данными между группами по 4 ;.

Пояснение:

-F ';;;;'установить разделитель полей ввода
-v 'OFS=;;;;'установить разделитель полей вывода
$4 == "Y"условие :, если поле 4Y
{ $3 = "UPDATE" }действие :изменить поле 3
то же самое для NиNA
{ print; }безусловное действие :печать (результирующая )строка

1
28.01.2020, 02:29

С помощью awk сначала установите разделители входных и выходных полей, затем найдите запись во входных данных, содержащую только y или n, затем внесите изменения и, наконец, выведите на стандартный вывод.

$ awk -F';;;;' '
    BEGIN{OFS=FS}
    $4 ~ /^[NY]$/{$3 = ($4 == "N") ? "NA" : "UPDATE"}1
' file

Другой подход может быть:

$ awk -F';;;;' 'BEGIN{OFS=FS;a["N"]="NA";a["Y"]="UPDATE"}
  $4 ~ /^[NY]$/{$3 = a[$4]}1' file
1
28.01.2020, 02:29

Теги

Похожие вопросы