これは私のデータファイルです。
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を試してみましたが、私は迷子になりました」と言っている間、いくつかの詳細を知っておくと便利です。
したがって、あなたが何をしようとしたのか、そして何が問題だと思うのかを他の人に教えてください。
つまり、次のように会話を進めます。ここに従うパターンは、私がよく見るパターンで、入力解析、処理(ニース処理、勘定科目作成)、および出力書式設定が同じ問題に混在して表示される場合です。
これは危険なパラダイムです。たとえば、これらすべてを実行するawkスクリプトがある場合は、きれいな印刷出力形式をテストしたいときはいつでもアカウントを再実行する必要があります。
したがって、いくつかのコードを表示しながら、3つのスクリプトを使用することをお勧めします。 1つは、入力を解析し、どのアクションを実行するかを決定するスクリプトです。与えられた結果に基づいてタスクを実行する人は結果をきれいに印刷します。それぞれはいくつかの入力データを取り出し、標準出力に書き込むことができます。生産のために、3つのパイプを次のパイプに接続できます。テストのために各項目を個別に呼び出すことができます。これにより、問題を解決するのが簡単になると思います。