als Dateinamen, um den Inhalt einer Datei zu verwenden, die sich durch eine Variable identifiziert ist (wie gefragt)
cut -c2-11 <"$(cat $filetouse)"
// or in zsh just
cut -c2-11 <"$(< $filetouse)"
es sei denn, der Dateiname in der Die Datei endet mit einem oder mehreren Newline-Zeichen, was die Leute nur selten tun, weil es ziemlich umständlich und unbequem ist. Dann etwas wie:
read -rdX var <$filetouse; cut -c2-11 < "${var%?}"
// where X is a character that doesn't occur in the filename
// maybe something like $'\x1f'
Tweaks: Ihre awk
druckt die Variable Referenz${completeFile}
oder ${deltaFile}
(weil sie innerhalb der einfachen Anführungszeichen awk
Skript sind) nicht der Wert entweder variabel. Wenn Sie den Wert tatsächlich wollen, wie ich aus Ihrer Beschreibung erwarten würden, sollten Sie die Shell Vars passieren zu awk vars wie diese
awk -vf="$completeFile" -vd="$deltaFile" '{n++} END{if(n>=1000)print f; else print d}' <"$deltaFile"`
# the " around $var can be omitted if the value contains no whitespace and no glob chars
# people _often_ but not always choose filenames that satisfy this
# and they must not contain backslash in any case
oder exportieren die Schale vars als env vars (wenn sie nicht bereits) und greifen Sie wie
awk '{n++} END{if(n>=1000) print ENVIRON["completeFile"]; else print ENVIRON["deltaFile"]}' <"$deltaFile"
auch Sie nicht Ihren eigenen Zähler benötigen, awk zählt bereits eingegebenen Datensätze
awk -vf=... -vd=... 'END{if(NR>=1000)print f;else print d}' <...
oder mehr kurz
awk -vf=... -vd=... 'END{print (NR>=1000?f:d)}' <...
oder ein Dateiargument statt Umleitung verwenden, um den Namen für das Skript
awk -vf="$completeFile" 'END{print (NR>=1000?f:FILENAME)}' "$deltaFile" # no <
und Sperre Hinterzeilenumbrüche wie oben Sie überhaupt eine Zwischendatei brauchen nicht verfügbar ist, nur
cut -c2-11 <"$(awk -vf="$completeFile" -'END{print (NR>=1000?f:FILENAME)}' "$deltaFile")"
oder Sie tun müssen, awk nicht wirklich, wc
das Zählen tun und jede POSIX oder klassische Schale kann
dem Vergleich zu tun
Was ist '$ {completeFile}'? – RomanPerekhrest
'$ {completeFile}' und '$ {deltaFile}' sind nur Variablennamen für die eigentlichen Dateien. Die Idee ist, ich habe einen Pre-Prozessor, der diesen Monat completeFile mit dem letzten Monat completeFile vergleicht. Die Ausgabe dieses Vergleichs ist deltaFile. Meistens ist es leer, aber wenn die deltaFile größer als xx% der completeFile ist (der> = 1000 Schritt), dann möchte ich die completeFile über fileToUse zum nächsten Prozess bringen ... sonst nehme ich die deltaFile zum nächsten Prozess über fileToUse – sigmazen
Sie brauchen wahrscheinlich nicht deltaFile, noch die meisten der Schritte, die Sie sprechen. Es könnte sinnvoll sein, nur awk diesen Monat completeFile mit dem letzten Monat completeFile vergleichen und von dort aus gehen. Bearbeiten Sie Ihre Frage, um eine übersichtliche, testbare Beispieleingabe (dh die vollständigen Versionen) und die erwartete Ausgabe einzubeziehen, damit wir Ihnen helfen können. Das fühlt sich sehr nach einer XY-Frage an. –