Мой диск выходит из строя, и это та же самая причина, по которой мой ноутбук работает медленнее?

$ perl -MText::CSV=csv -e '
  $csv = Text::CSV->new();
  while(my $row = $csv->getline(ARGV)) {
    $row->[13] = "NA" if ($row->[13] eq "");
    $csv->say(STDOUT, $row);
  };' input.csv

Обратите внимание, что массивы perl начинаются с 0, а не с 1 -, поэтому 14-е поле является элементом 13 $rowarrayref.

employee_number,employee_login,is_active,send_pkg_email,send_na_email,last_name,first_name,department,title,phone_number,employee_type,email,charge_code,area_code,mailstop,roomid
103293,jsmith@company.com,Y,,,Smith,Jessica,,,"+1 (650) 3530975",Employee,jsmith@company.com,,LOC0028.03,,03.C.01H
103295,fredl@company.com,Y,,,Long,Fred,,,"+1 (415) 9449428",Employee,fredl@company.com,,LOC0025.01,,01.D.04B
103297,lcheng@company.com,Y,,,Cheng,Laura,,,"+1 (650) 8623342",Contingent,lcheng@company.com,,NA,,
103307,cfb@company.com,Y,,,Brown,Chris,,,"+1 (512) 9644927",Employee,cfb@company.com,,ATX0607.16,,16.B.10D
103310,stanwang@company.com,Y,,,Williams,Stan,,,"+1 (650) 8048591",Employee,stanwang@company.com,,LOC0061.03,,03.D.01B

Строка с номером сотрудника _103297теперь содержит NA в 14-м поле.

Кстати, поля вывода здесь двойные -, цитируемые только при необходимости (, например. когда они содержат пробел. или если какое-либо из них содержало запятую, они тоже брались в кавычки ). Если вы предпочитаете, чтобы все поля в выходных данных были заключены в кавычки, как во входном файле, измените строку $csv = Text::CSV->new();на :

.

$csv = Text::CSV->new({always_quote => 1});

Текст ::CSV имеет множество других опций. например. если вы используете $csv = Text::CSV->new({always_quote => 1, strict => 1});, это также вызовет ошибку, если какая-либо из входных строк имеет другое количество полей. Подробности см. в man Text::CSV.


Кроме того, есть простое исправление для вашего awk-скрипта:

awk -F"," 'BEGIN {OFS=","}; $14 == "\"\"" { $14 = "\"NA\"" };1' input.csv

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

Поле 14 не пусто, когда вы просто разделяете строку ввода запятыми. Он содержит две кавычки("").

Эта строка awk one -также не работает, если какое-либо из полей содержит символ запятой. Это еще одна причина, по которой лучше использовать парсер CSV.

См. Существует ли надежный инструмент командной строки для обработки CSV-файлов? .

Также есть хороший парсер awk csv по адресуhttps://github.com/geoffroy-aubry/awk-csv-parser

4
04.01.2021, 06:05
1 ответ

Да, ваш диск неисправен:

 5 Reallocated_Sector_Ct   0x0033   001   001   005    Pre-fail  Always   FAILING_NOW 9800

Вы ничего не можете сделать, чтобы сделать диск «лучше». Что вам нужно делать дальше, зависит от того, какие резервные копии у вас есть, если они есть. Если у вас его нет, прекратите использовать свою систему и приобретите внешний диск, по крайней мере, такого же размера, как диск вашего ноутбука, а затем скопируйте на него как можно больше диска вашего ноутбука (с помощьюddrescue).

19
18.03.2021, 22:38

Теги

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