Таблица с разделителями пробелами в CSV с помощью стандартных инструментов обработки текста

Да, эти сообщения указывают на аппаратную ошибку.

Я предполагаю, что вы убедились, что ata2 действительно относится к жесткому диску, а не, например, к дисководу CD-ROM, с которого вы запускаете установку.

Вопрос в том, это привод или, возможно, кабель, соединяющий материнскую плату с приводом?

Однажды у меня была система, которая регулярно выдавала такие сообщения.У него была зеркальная конфигурация, которая иногда работала месяцами без проблем, но затем один диск (всегда, всегда один и тот же диск) выпадал, с аналогичными сообщениями в системном журнале. Оказалось, неисправен кабель SATA; после замены кабеля на новый ошибок больше не возникало.

Это была бы моя рекомендация: попробуйте а) повторно подключить кабель, б) заменить кабель. Также в) проверьте кабель питания жесткого диска. И г) если у вас есть другой блок питания, попробуйте также поменять блоки питания, так как неисправный блок питания также может вызвать такие ошибки. Если все это не удается, вам, возможно, придется сделать вывод, что диск действительно неисправен.

Но прежде чем вы это сделаете, попробуйте проверить, можно ли получить диагностическую информацию от накопителя, если на нем есть S.M.A.R.T. возможности. Попробуйте, например, smartctl / dev / hda (или какое бы устройство ни было). Вам может потребоваться сначала выполнить smartctl -s на / dev / hda , чтобы включить S.M.A.R.T. Однако обратите внимание, что неисправный кабель для передачи данных может вызвать ложные сообщения на диске, поэтому убедитесь, что вы правильно интерпретируете результаты smartctl .

1
10.11.2016, 16:49
2 ответа

Лучшим инструментом для чего-то подобного, вероятно, является sed , вот рабочий пример с использованием расширенных регулярных выражений:

sed -E 's:^([^ ]*)\s+([^/]*)/([^ ]*)\s+[^ ]*\s*#?\s*(.*):\1,\2,\3,\4:' file

Или если ваш ввод может быть разделен табуляцией:

sed -E 's:^([^[:space:]]*)\s+([^/]*)/([^[:space:]]*)\s+[^[:space:]]*\s*#?\s*(.*):\1,\2,\3,\4:' file

Вывод:

ssh,22,tcp,Secure Shell Login
linuxconf,98,tcp,
tacnews,98,udp,TAC News

Объяснение

  • s ::: использовать двоеточие в качестве разделителя выражения
  • ^ ([^] *) первая группа захвата, соответствие последовательность непробельных символов в начале строки
  • \ s + игнорировать пробел
  • ([^ /] *) вторая группа захвата, совпадать до косой черты
  • / игнорировать косую черту
  • ([^] *) третья группа захвата, соответствие последовательности непробельных символов
  • \ s + игнорировать пробел
  • [ ^] * игнорировать десятичное число
  • \ s * #? \ S * игнорировать пробел и необязательный хэш
  • (. *) четвертая группа захвата, остальная часть строки
2
27.01.2020, 23:25

Я бы использовал perl: У вас есть набросок regex, это заполняет пробелы.

perl -lne '
    / (\S+)     \s+      # non-whitespace followed by whitespace
      (\d+)     \/       # digits followed by slash
      (\S+)     \s+      # non-whitespace followed by whitespace
      (\S+)     \s*      # non-whitespace followed by optional whitespace
      (?:\#\s)? (.*)     # possibly a hash+space and whatever follows
    /x and print "$1,$2,$3,$4,$5"' file
1
27.01.2020, 23:25

Теги

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