2017-05-09 7 views
-2

Ich möchte fragen, wie ich eine Zeichenfolge mit Befehl in Linux entfernen kann?Wie entfernt man einen String mit awk/sed oder einem anderen Befehl in Linux?

cat /data/filename.txt 
A|2|3|4|5|6|7|8|9|10|0030|12|05/09/17 
B|2|3|4|5|6|7|8|9|10|00045|12|05/09/17 
C|2|3|4|5|6|7|8|9|10|061|12|05/09/17 

und die Ausgabe:

cat /data/filename.txt 
A|2|3|4|5|6|7|8|9|10|30|12|05/09/17 
B|2|3|4|5|6|7|8|9|10|45|12|05/09/17 
C|2|3|4|5|6|7|8|9|10|61|12|05/09/17 
+0

Nicht klar genug. Sie möchten alle führenden Nullen in jeder Spalte oder nur der vorletzten Spalte oder nur der 10. Spalte (unter der Annahme 0) oder nur führende Nullen vor "11" (in jeder Spalte) entfernen? – John3136

+0

nur die 10. Spalte Sir und alle vor in dieser Spalte. ein anderes Beispiel: 2014 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 0019 | 12 und werden 2014 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 19 – wirawiri

Antwort

1

Versuch:

awk -F"|" '{sub(/^0+/,"",$11)} 1' OFS="|" Input_file 

Herstellung Feldtrenn als | Setzen Sie dann die Nullen des 111. Felds gemäß Ihren Anforderungen in die Nullen des Anfangsbuchstabens ein. Wenn Sie 1 angeben, wird die neu bearbeitete Zeile gedruckt (wenn Nullen durch NULL ersetzt wurden), und das Ausgabefeldtrennzeichen als | und Erwähnen der Input_file dann.

EDIT: Hinzufügen der zweiten Lösung zum Entfernen von -000 in 11. Feld wie folgt.

awk -F"|" '{sub(/^0+/,"",$11);sub(/-0+/,"-",$11)} 1' OFS="|" Input_file 

Hier mache ich | Als Feldseparator wird dann die Nullen im 11. Feld durch NULL ersetzt, und dann wird die Zahl -0 ersetzt, indem alle Werte von -0 bis Nullen angezeigt werden. Dann wird 1 die Zeilen ausgeben. Einstellung Feld Trennzeichen als | auch.

+0

Happy dass es für dich funktioniert – RavinderSingh13

+0

hai @ravinder, kann ich dich noch einmal fragen? es stellt sich heraus, ich brauche einen kleinen Gefallen von dir, wenn das Format in diese A | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 0030-00456 | 12 | 05/09/17 also brauche ich so A | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 30-456 | 12 | 05/09/17 hast du eine Idee, wie verwandle ich mich in das? – wirawiri

+0

@wirawiri: Bitte sehen Sie meine bearbeitete Antwort jetzt, lassen Sie mich wissen, wenn dies Ihnen hilft. – RavinderSingh13

0
awk 'BEGIN{FS=OFS="|"} {for(i=1;i<=NF;i++)$i=sprintf("%d", $i)}1' /data/filename.txt 

2014|2|3|4|5|6|7|8|9|10|11|12 
2015|2|3|4|5|6|7|8|9|10|11|12 
2016|2|3|4|5|6|7|8|9|10|11|12 

Annahme: Ihre Datei enthält nur ganzzahlige Werte begrenzt durch |

+0

oh mein Schlechter, es gibt einige Zeichen sind in String-Werten :(,, und diese Zeichenfolge wird 0 Werte richtig? ich werde meine Frage zu beheben – wirawiri

1

Eine weitere Option mit awk:

awk -F\| -vOFS=\| '{$11+=0}1' file 
+0

Bitte sagen Sie uns, was los ist! –

Verwandte Themen