채우기 옵션이 있는 일부 레코드(열)를 출력하기 위해 printf 문을 스크립트에 작성하려고 합니다.

채우기 옵션이 있는 일부 레코드(열)를 출력하기 위해 printf 문을 스크립트에 작성하려고 합니다.

이것은 다음과 같은 내 데이터 파일입니다.

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

이는 원하는 출력입니다. 나는 awk를 다른 방법으로 사용해 보았지만 길을 잃었습니다.

이는 원하는 출력입니다. 나는 awk를 다른 방법으로 사용해 보았지만 길을 잃었습니다. 도와주세요.

답변1

해당 질문은 반대표를 받았지만 명확한 이유 없이 아무도 대답하지 않았습니다.

하지만 추측할 수는 있습니다. 입력과 원하는 출력을 제공했지만(일반 텍스트가 스크린샷보다 낫지만 이는 상대적으로 사소한 세부 사항임) 시도하려는 작업에 대한 구체적인 지침을 제공하지 않았습니다. "다른 방법으로 awk를 사용해 보았지만 길을 잃었습니다"라고 말하는 동안 몇 가지 세부 사항을 아는 것이 유용할 것입니다.

따라서 귀하가 무엇을 시도했는지, 그리고 어떤 문제가 있다고 생각하는지 나머지 사람들에게 알려주십시오.

즉, 다음과 같이 대화를 진행하겠습니다. 여기에서 따르는 패턴은 제가 자주 보는 패턴으로, 입력 구문 분석, 처리(니스 처리, 계정 생성) 및 출력 형식 지정이 동일한 문제에 혼합되어 나타나는 경우입니다.

이것은 위험한 패러다임이다. 예를 들어 이 모든 작업을 수행하는 awk 스크립트가 있다면 예쁜 인쇄 출력 형식을 테스트하고 싶을 때마다 계정을 다시 수행해야 합니다.

따라서 몇 가지 코드를 보여주면서 세 가지 스크립트도 사용하는 것이 좋습니다. 하나는 입력을 구문 분석하고 어떤 조치를 취할지 결정하는 스크립트입니다. 주어진 결과에 따라 작업을 수행하는 사람은 결과를 예쁘게 인쇄합니다. 각각은 일부 입력 데이터를 가져와 표준 출력에 쓸 수 있습니다. 생산을 위해 세 개의 파이프를 다음 파이프에 연결할 수 있습니다. 테스트를 위해 각 항목을 개별적으로 호출할 수 있습니다. 이렇게 하면 문제를 해결하기가 더 쉬워질 것이라고 생각합니다.

관련 정보