該代碼似乎不正確。使用old_tag = awk
代碼會嘗試輸出var old_tag
中的awk命令的結果。應該在=
周圍沒有空格的情況下分配var,並且命令應該包含在$(..)
中。它可能是原始代碼中的反向代碼,這些都是折舊的,反向代碼用於SO中的格式化。
你的問題本來就容易用一個例子來inputfile中回答,而是試圖解釋假設inputlines像
apple x1
car a
rotten apple
tree sf
apple x5
car a4
apple x3
我切換old_tag
和new_tag
,似乎更有意義。
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
詞語x1 x5 x3
被存儲在數組a
,並隨機將這3箇中的一個分配到new_tag
。
請更具體。 Awk是一種自己的語言。我們並沒有取代你的學習能力。你不明白哪部分? – Jankapunkt