mit habe ich eine Datei mit dem Namen file.txt
mit folgenden WertenAnfügen Inhalt in eine Datei, falls nicht vorhanden comma separated values
4
5
6
7
Ich habe einige comma separated values auf die obige Datei übergeben.
Unten ist mein Befehl:
filename="file.txt"
IFS=","
var="4,5"
for v in $var; do
while IFS= read -r line; do
if [[ $line == $v* ]]; then
printline="no"
else
printline="yes"
echo "$line"
fi
done < "$filename"
done
ich die obige Befehl wollen in eine neue Datei anzuhängen, wenn es nicht die Werte in der Datei vorhanden ist, dass ich von den Variablen übergeben. Zum Beispiel übergebe ich 4,5 in der Datei. Allerdings sollte es 6,7 drucken, da ich diese Werte nicht übergebe.
Gegenwärtig beginnt Schleifen mit Nummer 4 und Drucke 5,6,7. Wenn die Schleife jedoch erneut mit Nummer 5 beginnt, wird 4,6,6 gedruckt.
Der obige Befehl sollte das Ergebnis wie folgt erzeugen und sollte nicht zurückgeschleift werden und die Nummer erneut drucken.
6
7
Irgendwelche Möglichkeiten, dies zu erreichen? Oder können Sie mir eine andere Methode mit Beispielcode vorschlagen?
Statt 'IFS = ""; var = "4,5"; für v in $ var; do ... 'do' IFS =, lies -ra vars <<< "$ var"; für v in "$ {vars [@]}"; tu ...; fertig. –
Die Originaldatei hat eine Nummer pro Zeile? Oder möchten Sie alle Zeilen ignorieren, die * mit einer Ihrer bestandenen Nummern beginnen *? Für was ist 'printline'? Was passiert, wenn Sie diesen Code ausführen? Wenn Sie 'set -x' zum Skript hinzufügen und es ausführen, sehen Sie, warum das passiert? –