So ignorieren Sie mit dem Awk-Befehl das Leerzeichen zwischen Datum und Uhrzeit

So ignorieren Sie mit dem Awk-Befehl das Leerzeichen zwischen Datum und Uhrzeit

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"

verwandte Informationen