这是我的数据文件,名为:
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 但我迷失了。请帮忙。
答案1
尽管这个问题被否决了,但没有人回答——没有任何明确的理由。
但我可以猜测:虽然您已经给出了输入和所需的输出(纯文本比屏幕截图更好,但这是一个相对较小的细节),但您没有给出任何具体说明您所尝试的内容。虽然您说“我尝试过以不同的方式使用 awk,但我迷失了”,但了解一些细节会很有用。
因此,请让我们其他人知道您尝试过什么以及您认为其中存在哪些问题。
也就是说,我将通过这样说来推动对话:您在这里遵循的模式是我经常看到的模式,即输入解析、处理(nicing、帐户创建)和输出格式化出现混合在同一个问题中。
这是一个危险的范例。如果您有一个 awk 脚本完成所有这些操作,那么 - 例如 - 每次您想要测试打印精美的输出格式时,您都需要重新执行帐户操作。
因此,虽然我鼓励您向我们展示一些代码,但我也鼓励您使用三个脚本:一个用于解析输入并决定采取什么操作;另一个用于分析输入并决定要执行的操作。执行动作的人;给定结果后,它会漂亮地打印结果。每个都可以获取一些输入数据并写入标准输出。对于生产,您可以将三个管道连接到下一个。为了进行测试,您可以单独调用每一个。如果你这样做,我想你会发现问题更容易处理。