У меня есть огромный текстовый файл, который выглядит так:
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,3
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,8
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,12
Желаемый вывод это:
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-03
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-08
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,MI-12
Я пробовал другие соответствующие посты здесь и в других сообществах, но не смог точно получить то, что хочу.
ОБНОВИТЬ
Это перекрестный вопрос (для этого мне нужны и ответы Unix / Perl, и пакетные решения / PowerShell.), У которого есть интересные ответы.
"1 2 3 4" | awk '{$2=$2;print $0}'
дает:1 2 3 4
(только 1 пробел (или OFS) осталось между полями). ex2)echo "1,,,2,3,,,,4" | awk -F',' '{$2=$2;print $0}'
дает:1 2 3 4
(запятые стали пробелами). Могут быть и другие побочные эффекты. Протестируйте и используйте другой подход (например, gsub для переменной копирования $ 0), если назначение поля имеет вредные побочные эффекты.Вы можете попробовать использовать
awk
:источник
Вот решение Perl:
-a
Флаг позволяет рассматривать в качестве входного массива, на основе указанного сепаратора с-F
. По сути, мы изменяем последний элемент в этом массиве и перестраиваем его с помощьюjoin
команды.источник
sprintf
же это основная идея вашего ответа. Не так, если это не правильно, просто не предлагать что-то другое, чем принятый ответ. +1 в любом случае.sprintf()
обычно используется при записи строки определенного формата в переменную, поэтому она используется во многих других языках. Я также могу написать это на Python - Python не имеет,sprintf()
но основная идея будет одинаковой независимо - запись отформатированной строки в переменную. В качестве альтернативы, мы можем напрямую работать с элементами массива и просто печатать их. С этим типом вопросов есть конечное количество решений, в основном это то, что я пытаюсь сказатьС входными данными, такими как:
в text.csv
код ниже
производит вывод как:
источник
Tcl
Вот мое решение, выполненное с использованием Tcl, который читает из файла input.csv и помещает результат в файл output.csv
демонстрация
источник