В файле с фиксированной шириной удалить символ новой строки в поле данных

С помощью GNU awk вы можете

gawk -v start=5 -v end=8 '{
    mid = substr($0, start, end-start+1)
    print substr($0, 1, start-1) gensub(/./, "N", "g", mid) substr($0, end+1)
}' file

Или с perl

perl -spe 'substr($_, $start-1, $end-$start+1) =~ s/./N/g' -- -start=5 -end=8 file

В обоих решениях мы передаем начальное и конечное значения программе с параметрами командной строки. Это упрощает изменение значений внутри сценария оболочки. Если вам нужно сделать символ замены N динамическим, это должно быть довольно очевидно, как это сделать.

0
19.05.2021, 17:04
1 ответ
$ sed 'N; s/\n/  /' file
01 DAVIDS 800 ABC VISAL NAGAR, ABC  BUILDING HYD TELANGANA 6000 DEVELOPER HR DEPT FULL TIME EMPLOYEE
02 KAMAL  900 XYZ KAMAN NAGAR, DEF  BUILDING SEC TELANGANA 8000 DEVELOPER MR DEPT FULL TIME EMPLOYEE

Это использует sedдля внесения необходимых изменений.

Для каждой строки исходного файла считывается следующая строка и добавляется к текущей строке с символом новой строки в качестве разделителя. Это делается с помощью команды Nв sed. Затем используется команда s///для замены разделительного символа новой строки двумя пробелами.

Перенаправить вывод в файл с новым именем, чтобы сохранить его, например.

sed 'N; s/\n/  /' file >newfile
2
28.07.2021, 11:32

Теги

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