Ich möchte den Zeitstempel als eine Variable aus dem Dateiinhalt drucken. Ich brauche einen awk-Befehl, um Leerzeichen zwischen Datum und Zeit zu ignorieren. Der in $2 zu druckende Wert ist SECOND_VALUE.
ex:
$ cat /var/tmp/file.txt
1#04-06-2019 03:06:17
Code:
list=`cat /var/tmp/${file}.txt`
for i in $list
do
FIRST_VALUE=`echo $i|awk -F'#' '{print $1}'`
SECOND_VALUE=`echo $i|awk -F '#' '{print $2}'`
done
Ausgabe:
++ cat /var/tmp/file.txt
+ list='1#04-06-2019 03:06:17' '
+ for i in '$list'
++ echo 1#04-06-2019
++ awk -F# '{print $1}'
+ FIRST_VALUE=1
++ echo 1#04-06-2019
++ awk -F '#' '{print $2}'
+ SECOND_VALUE=04-06-2019
Erwartete Ausgabe:
SECOND_VALUE=04-06-2019 03:06:17
Antwort1
Das sollte funktionieren.
second_val=$(cat /var/tmp/file.txt | awk -F '#' '{print $2}')
Wie im Kommentar richtig vorgeschlagen, können Sie auch
second_val=$(awk -F '#' '{print $2}' /var/tmp/file.txt)
Antwort2
Sie können dies vereinfachen, indem Sie ein anderes Format für die Datumsausgabe verwenden. Konvertieren Sie die Daten Ihres Datumsfelds in die Anzahl der Sekunden seit der Unix-Epoche (00:00:00, 1. Januar 1970) mit
$ date -d "2019-06-04 14:02:32" +"%s"
und fügen Sie dann diesen ganzzahligen Wert in das Datumsfeld ein.
Antwort3
Vorausgesetzt, Sie möchten und müssen eine Schleife erstellenin der Schaleüber jede Zeile der Datei (also vorausgesetztSie machen nicht nur Textverarbeitung), könnten Sie es schreiben:
while IFS='#' read <&3 -r first_value second_value; do
something with "$first_value" and "$second_value" 3<&-
done 3< "/var/tmp/${file}.txt"