2017-12-08 3 views
-3

Lassen Sie sagen, ich Datei test.txt haben und es so aussehen:Bash-Skript Teildaten in der Zeile mit regex

14.03.2016 12:01:58 0001039 28,427 0,200  28,427 28,437 28,427 
14.03.2016 12:02:28 0001090 28,442 0,200  28,442 28,439 28,444 
14.03.2016 12:02:58 0001139 28,469 0,230  28,459 28,469 28,504 

Ich brauche das Skript mit bash zu analysieren, so dass ich für jede Zeile erhalten:

a = 14.03.2016 
b = 12:01:58 
c = 0001039 
d = 0,200 

Ich bin mir nicht sicher, wie man das mit Grep macht.

+0

Sind 'a, b, c, d' Shell-Variablen? – anubhava

+0

ja müssen sie sein: D –

+0

siehe auch http://mywiki.wooledge.org/BashFAQ/001 – Sundeep

Antwort

2

Bash hat dies ziemlich viel gebaut in.

while read -r a b c _ d rest; do 
    : things with "$a", "$b", "$c", and "$d" 
done <inputfile 
1

AWK zur Rettung

cat myscript.awk 
BEGIN { RS = "\n" ; FS = " " } 

{ 
     print "a = ", $1 
     print "b = ", $2 
     print "c = ", $3 
     print "d = ", $5 
} 

awk -f myscript.awk inputfile 

a = 14.03.2016 
b = 12:01:58 
c = 0001039 
d = 0,200 
a = 14.03.2016 
b = 12:02:28 
c = 0001090 
d = 0,200 
a = 14.03.2016 
b = 12:02:58 
c = 0001139 
d = 0,230 
+0

Was ist mit den 'RS' und' FS' Zuweisungen? Die Standardeinstellungen sollten in Ordnung sein. – tripleee

+0

Wahr. Wenn das OP Datensatztrennzeichen und Feldtrennzeichen aus irgendeinem Grund ändern möchte, muss es wissen, wo es geändert werden muss. :) – SriniV

0

Unter der Annahme, dass die erste Zeile der Eingabedatei in Variable line gespeichert ist, können Sie

tun
arr=($line) 

ein Array in die aus den einzelnen Wörtern zu machen die Linie.

a=${arr[0]} 

würde dann das erste Wort der Variablen a zuweisen.

0

andere Art und Weise, wenn der Name a, b, ... ist nicht erforderlich.

while read line;do 
    set -- $line 
    echo '$3 = '"$3"' $6 = '"$6" 
done< infile 
Verwandte Themen