Как я могу обнулить, заполняют конкретное поле в текстовом файле?

У меня есть файл как это:

123123213,456,be
124243233,4346,ytr
123123123,436535,uytr
324234324,322,yt
234324323,32,tyutr

Я хочу к нулевой клавиатуре, чтобы среднее поле дало результат:

123123213,00000456,be
124243233,00004346,ytr
123123123,00436535,uytr
324234324,00000322,yt
234324323,00000032,tyutr

Как я делаю сценарий, что woud делают это?

Я видел пример как это

awk '{ $6=sprintf("%06s", $6); print $0}'

но я действительно не понимаю это и таким образом не могу получить его работа.

4
задан 20.06.2012, 22:54

2 ответа

Попробуйте это:

awk -F , '{ printf "%i,%08i,%s\n" , $1 , $2 , $3 }' file
8
ответ дан 07.12.2019, 19:30

Так как Вы отметили свой вопрос [sed], вот a sed версия на основе сценария здесь.

sed 's/[^,][^,]*/\n0000000&/2;s/\n[^,]*\(.\{8\}\),/\1,/' inputfile

Объяснение:

  • поле состоит из группы из одной или нескольких незапятых: [^,][^,]* (это могло также быть записано как [^,]\+)
  • замена для второго поля (соответствие) (s///2) новая строка, набор нулей и содержание соответствия: \n0000000& (новая строка используется для маркировки начала поля для следующего шага),
  • теперь соответствуйте новой строке, нулю или большему количеству незапятых и точно восемь \{8\} из любого символа (получающий те символы \(\) ) сопровождаемый запятой
  • замените полученными символами \1 для соответствия это удаляет временную новую строку и избыточные нули

Путем это работает, должен добавить, что избыточные нули в начале поля затем обрубают все, но

1
ответ дан 07.12.2019, 19:30

Теги

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