Der Code scheint falsch zu sein. Mit old_tag = awk
versucht der Code die Ergebnisse des awk-Befehls im var old_tag
auszugeben. Eine Zuweisung einer Variablen sollte ohne Leerzeichen um die =
erfolgen, und der Befehl sollte in $(..)
enthalten sein. Es könnte sich um Backtics im ursprünglichen Code handeln, diese werden abgeschrieben und Backtics werden für die Formatierung in SO verwendet.
Ihre Frage wäre einfacher gewesen, mit einem Beispiel Eingabedatei zu beantworten, aber versuchen inputlines wie
apple x1
car a
rotten apple
tree sf
apple x5
car a4
apple x3
Ich wechselte old_tag
und new_tag
, die mehr Sinn zu machen scheint zu erklären, übernehmen.
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
Dieser cod versucht, einen neuen Tag zu ersetzen, indem Sie zu finden, den alten Tag in $tag_dir/$file
suchen. Wenn das Tag mehr als einmal auftritt, nehmen Sie eine der Zeilen zufällig.
Der Code näher erläutert:
# 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
Mit dem Probeneingang und old_tag="apple"
, wird der Code die Zeilen mit Apfel als erstes Wort
apple x1
apple x5
apple x3
Die Worte x1 x5 x3
werden finden gespeichert in Array a
und zufällig einer dieser 3 ist new_tag
zugeordnet.
Bitte präzisieren. Awk ist eine eigene Sprache. Wir ersetzen nicht Ihre Lernfähigkeit. Welchen Teil davon verstehst du nicht? – Jankapunkt