2016-09-30 2 views
1

Entschuldigung, wenn dieses bereits abgedeckt worden ist. Ich habe nichts Passendes gefunden.Wie man das mittlere Feld des Textes kurzschließt, ohne die anderen Felder zu verlieren

Wenn ich eine Textdatei mit Feldern variabler Länge habe, wie kann ich ein Feld abschneiden, ohne die anderen Felder zu opfern? Ein Beispiel;

firstField secondfieldisthislong thirdField 
firstField secondfieldisreallylongandgoesonforever thirdField 
firstField secondshortfield thirdField 

Ich möchte das zweite Feld auf eine feste Länge abschneiden. Cut scheint das nicht zu können und meine awk/sed Fähigkeit ist nicht großartig. Vielen Dank.

Antwort

4

Mit awk:

awk '{$2 = substr($2, 1, 10)}; 1' file.txt 

ersetzen 10 mit der Länge der Zeichen, die Sie wollen.

Hier erstellen wir die Datensätze neu, wobei das zweite Feld auf die gewünschte Länge gekürzt wird.

substr($2, offset, length) tun Zeichenfolge schneiden, beginnend von offset bis length Zeichen.

Beispiel:

% cat file.txt        
firstField secondfieldisthislong thirdField 
firstField secondfieldisreallylongandgoesonforever thirdField 
firstField secondshortfield thirdField 

% awk '{$2 = substr($2, 1, 6)}; 1' file.txt 
firstField second thirdField 
firstField second thirdField 
firstField second thirdField 

% awk '{$2 = substr($2, 1, 10)}; 1' file.txt 
firstField secondfiel thirdField 
firstField secondfiel thirdField 
firstField secondshor thirdField 
0

Mit GNU sed:

$ sed -r 's/(.* .{6}).* /\1 /' <<< "firstField secondfieldisreallylongandgoesonforever thirdField" 
firstField second thirdField 
Verwandte Themen