Lassen Sie uns sagen, dass ich eine Datei (example.txt) mit der nächsten Struktur:aber nicht alle Felder in Textdatei (Shell/bash)
NAAME 111 2222 333
NAMME 111 22 333
NNA ME 444 555 2
NNAAME 1 5 8
N MEEE 44 66 111
Ich möchte die Räume zwischen den ersetzen Zahlen mit einem Trennzeichen, wie |
oder ,
, aber nicht den Namen beeinflussen.
Eine Option, die ich dachte, ist, den Platz im Namen zu ändern und einen "niedrigen Balken" zu setzen, dann alle Leerzeichen in der Datei zu entfernen und "|" und nach dem Ändern wieder das "_" im Namen für ein Leerzeichen.
Irgendeine Idee, wie man das in der Shell macht? Oder vielleicht eine bessere Option?
Der erwarten Ausgang wäre dies
NAAME|111|2222|333
NAMME|111|22|333
NNA ME|444|555|2
NNAAME|1|5|8
N MEEE|44|66|111
Thank you very much!
ich es –
jetzt aktualisiert haben Sie die erwartete Ausgabe zeigt, nachdem der alle Räume haben Name ersetzt durch eine Pipe '|' und der einzige _code_, den ich in diesem ganzen Thread sehe, der das tut, was Sie sagen wollen, ist derjenige, der von andlrc geschrieben wurde. Der von Chris Maes und Ihnen als Kommentar zu seiner Antwort geschriebene Text liefert nicht die erwartete Ausgabe, wie in der Frage angegeben! Warum also wird eine Antwort, die nicht die erwartete Ausgabe produziert, als die beste Antwort markiert und auch gewählt. Die Antwort von andlrc ist diejenige, die als beste Antwort und auch als beste Antwort markiert werden sollte, da sie schließlich die definierte erwartete Ausgabe produziert. – user3439894
Ich habe die Antwort 'sed -i' s/\ ([[: digit:]] \) \ \ ([[: digit:]] \)/\ 1 | \ 2/g 'datei.txt' verwendet plus 'sed -i 's/\ ([[: oben:]] \) \ \ ([[: digit:]] \)/\ 1 | \ 2/g'' und es funktioniert mit meiner Datei. Vielleicht ist etwas, was ich vermisse, weil ich nicht viel über Shell weiß, aber es funktioniert –