Как исправить длину столбца в файле данных и преобразовать его в CSV-файл

Мое требование - удалить специальные символы и несколько последовательных пробелов в unix и преобразовать файл в файл csv. Я могу достичь вышеуказанных вещей, но моя проблема в том, что длина моего выходного столбца CSV-файла отличается от длины столбца таблицы. Мне нужно обрезать столбцы после удаления специальных символов и пробелов, так что я не могу сделать это в представлении, прежде чем bcp из данных.

Мне нужно справиться с этим внутри Unix

Ниже приведены команды, которые я использую

bcp master..STTV_CSTDL out temp.dat -Sdev1 -Udbo -Pdbo1 -b1000 -c -t'123456789'

awk '{gsub(/[[:punct:]]/," ")}1' temp.dat > temp2.dat

sed -e 's/  */ /g' temp2.dat > temp3.dat

До этого шага я могу получить чистые данные после удаления специальных символов, но после этого мне нужно установить длину столбца

у меня есть около 25 столбцов, в которых column3 - 10 символов (у данных будет максимум 20 символов) column5 - 19 символов (у данных будет максимум 35 символов) column19 - 21 символ (у данных будет максимум 19 символов. поэтому дополнительно 3 пробелы должны быть добавлены в конце).

Для этого я также попробовал приведенную ниже команду, но она не работает, как ожидалось

awk 'BEGIN {F="123456789" };
{
printf ("%-12s%-1s%-10s%-1s%-19s%-8s%-4s%-9s%-1s%-1s%-8s%-10s%-1s%-19s%-25s%-22s%-2s%-9s%-1s%-1s%-s%-s%-s%-s%-s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25)}' temp3.dat > temp4.dat 

после использования этой команды в определенных строках записи перемещаются в следующий столбец, и файл полностью перекрывается. Пожалуйста, помогите мне, я борюсь за 2 дня для этого.

Пример ввода и желаемый вывод

INPUT
606322089~ ~CHRISTINAITYREW~E~MARCHETTO                          ~00210816~0000~ ~ ~ ~ ~ ~ ~ ~AD   DR    ADDRESSAD   DR    ADDRESS           U~CINCINNATI         ~OH~452060000~ ~ ~SECOSXSDS ND SAMPLE                               ~ ~ ~ ~ 

OUTPUT
606322089~ ~CHRISTINAI~E~MARCHETTO                          ~00210816~0000~ ~ ~ ~ ~ ~ ~ ~AD   DR    ADDRESSAD   DR~CINCINNATI            ~OH~452060000~ ~ ~SECOSXSDS ND SAMPLE                             ~ ~ ~ ~ 

1 ответ

Вот несколько примеров использования поля точности:

# printf "X%-3.3sX\n" .
X.  X
# printf "X%-3.3sX\n" .........
X...X
# printf "X%-.3sX\n" .........
X...X
# printf "X%.3sX\n" .........
X...X
# printf "X%.3sX\n" .........
X...X
# printf "X%.5sX\n" .........
X.....X
# printf "X%.5sX\n" .
X.X
# printf "X%5.5sX\n" .
X    .X
# printf "X%-5.5sX\n" .
X.    X

Обратите внимание на эффекты комбинации поля точности и поля ширины, когда значение для печати меньше значений поля ширины и поля приоритета.

Другие вопросы по тегам