私はBashスクリプティングの初心者です。私は、この特定のコード行を理解するのに苦労しています。助けてください。Bashスクリプトawk
old_tag = awk -v search="$new_tag" -F" " '$1==search { a[count] = $2; count++; } END { srand();print a[int(rand()*(count-1))+1] }' $tag_dir/$file
[ -z "$new_tag" ] && break
私はBashスクリプティングの初心者です。私は、この特定のコード行を理解するのに苦労しています。助けてください。Bashスクリプトawk
old_tag = awk -v search="$new_tag" -F" " '$1==search { a[count] = $2; count++; } END { srand();print a[int(rand()*(count-1))+1] }' $tag_dir/$file
[ -z "$new_tag" ] && break
コードが間違っているようです。 old_tag = awk
を指定すると、コードはawkコマンドの結果をvar old_tag
に出力しようとします。 varの割り当ては、=
の周りにスペースを入れずに行う必要があり、コマンドは$(..)
で囲む必要があります。元のコードではバッククトであった可能性がありますが、これらは償却され、SOでの書式設定にはバッククエストが使用されます。
ご質問は、例えば、入力ファイルと答えるが、より多くの意味を成しているようだ
apple x1
car a
rotten apple
tree sf
apple x5
car a4
apple x3
私は
old_tag
切り替え
とnew_tag
、のような仮定inputlinesを説明しようとする方が簡単だったでしょう。
new_tag=$(awk -v search="$old_tag" -F" " '
$1==search { a[count] = $2; count++; }
END { srand(); print a[int(rand()*(count-1))+1] }
' $tag_dir/$file)
[ -z "$new_tag" ] && break
このタラは$tag_dir/$file
で古いタグを検索して新しいタグを見つけるために置き換えるしようとします。タグが複数回出現する場合は、いずれかの行をランダムに取ります。
コードをより詳細に説明する:
# assign output to variable new_tag
new_tag=$(..)
# use awk program
awk ..
# Assign the valuo of old_tag to a variable "search" that can be used in awk
-v search="$old_tag"
# Different fields seperated by spaces
-F" "
# The awk programming lines
' .. '
# Check first field of line with the variable search
$1==search { .. }
# When true, store second field of line in array and increment index
a[count] = $2; count++;
# Additional comands after processing everything
END {..}
# Print random index from array
srand(); print a[int(rand()*(count-1))+1]
# Use file as input for awk
$tag_dir/$file
# Stop when no new_tag has been found
[ -z "$new_tag" ] && break
# I would have preferred the syntax
test -z "${new_tag}" && break
サンプル入力とold_tag="apple"
と、コードが最初の単語
apple x1
apple x5
apple x3
としてAppleと行に格納されているx1 x5 x3
単語を見つけます配列a
とランダムにこれらの3つのうちの1つがnew_tag
に割り当てられます。
具体的にしてください。 Awkは独自の言語です。あなたの学習能力を置き換えるものではありません。それのどの部分を理解していないのですか? – Jankapunkt