Я пытаюсь написать оператор printf в скрипте для вывода некоторой записи с опцией padding (столбцы)

Вот мой файл данных под названием:

bblack|Black|Brian|P|5|sun
lbanas|Banas|Kerry|S|5|mercury
dholder|Holder|David|S|5|venus
dives|Ives|David|W|5|earth
slambert|Lambert|Scott|S|5|mars
rtaylor|Taylor|Rich|S|5|jupiter 
dtempleman|Templeman|Daniel|W|5|saturn
vtrimboli|Trimboli|Vincent|S|5|uranus
swalker|Walker|Steve|W|5|neptune
szemanek|Zemanek|Steven|W|5|pluto

А вот мой скрипт

#!/bin/bash
echo "USER_ID      LAST_NAME      FIRST_NAME       JOB       OLD_NICE     PREFERRED_PASSWORD"
while read IN_RECORD
do
     USER_ID=`echo $IN_RECORD | cut -d'|' -f1`
     LAST_NAME=`echo $IN_RECORD | cut -d'|' -f2`
     FIRST_NAME=`echo $IN_RECORD | cut -d'|' -f3`
     JOB=`echo $IN_RECORD | cut -d'|' -f4`
     OLD_NICE=`echo $IN_RECORD | cut -d'|' -f5`
     PREFERRED_PASSWORD=`echo $IN_RECORD | cut -d'|' -f6`
     FULL_NAME="$FIRST_NAME $MIDDLE. $LAST_NAME"

     echo "$USER_ID           $LAST_NAME         $FIRST_NAME           $JOB         $OLD_NICE         $PREFERRED_PASSWORD"

     if [ "$JOB" = "P" ]
     then
         sudo nice -n3 [ $USER_ID,$LAST_NAME,$FIRST_NAME,$JOB,$OLD_NICE,$PREFERRED_PASSWORD ]
         echo "NEW_NICE = 3"
     elif [ "$JOB" = "S" ]
     then
         sudo nice -n6 [ $USER_ID,$LAST_NAME,$FIRST_NAME,$JOB,$OLD_NICE,$PREFERRED_PASSWORD ]
         echo "NEW_NICE = 6" 
     else
         sudo nice -n7  [ $USER_ID,$LAST_NAME,$FIRST_NAME,$JOB,$OLD_NICE,$PREFERRED_PASSWORD ]
         echo "NEW_NICE = 7"
     fi

     if [ -z "$(getent passwd $USER_ID)" ]; 
     then
         sudo useradd -m -c "$FULL_NAME" -p $(echo $P4ssw0rd | openssl passwd -1 -stdin) $USER_ID
         MESSAGE="$USER_ID created"
         echo "$USER_ID created"
     else
         MESSAGE="$USER_ID already setup "
         echo $MESSAGE
     fi

done < test3_data.txt > hamd.txt

Here is the output desired. I have tried using awk in different ways but i am lost.

Вот желаемый вывод. Я пробовал использовать awk разными способами, но я запутался. Пожалуйста, помогите.

-1
26.11.2016, 20:25
1 ответ

Никто не ответил, хотя вопрос был отклонён - без объяснения причин.

Но я могу предположить: хотя вы указали свои входные данные и желаемый результат (простой текст лучше, чем скриншот, но это относительно незначительная деталь), вы не дали никаких конкретных указаний на то, что вы пробовали. Хотя вы говорите: "Я пробовал использовать awk разными способами, но я запутался", было бы полезно увидеть некоторые подробности.

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

При этом я немного продвину разговор, сказав следующее: модель, которой вы придерживаетесь, я вижу довольно часто, а именно: входной парсинг, обработка (nicing, создание аккаунта) и выходное форматирование смешиваются в одном и том же вопросе.

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

Поэтому, хотя я призываю вас показать нам часть вашего кода, я также призываю вас иметь три сценария: один, который анализирует входные данные и решает, какие действия предпринять; один, который выполняет эти действия; один, который, учитывая результаты, красиво печатает результаты. Каждый из них может принимать некоторые входные данные и писать на стандартный вывод. Для производства вы можете передавать три команды одну другой. Для тестирования вы можете вызывать каждую из них отдельно. Если вы сделаете это, я думаю, вы обнаружите, что проблема стала гораздо более решаемой.

1
28.01.2020, 05:10

Теги

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