2017-08-08 1 views
-1

Ich habe eine Datei wie:
id1 AB CT GA BC id2 GV LP AJ MTUnix: Wie gruppiert man alle zwei Spalten?

Jeder Vorschlag:
id1 A B C T G A B C id2 G V L P A J M T

und ich haben möchte?

+0

Ich habe habe diese Frage zu schließen, weil es sich um eine Anfrage für eine Empfehlung für ein Werkzeug oder Lösung zu sein scheint eher als eine Bitte um Unterstützung mit Ihrem eigenen Code. Das macht Ihre Frage für StackOverflow off-topic. Wenn diese Einschätzung falsch war und Sie tatsächlich Hilfe beim Schreiben Ihres eigenen Codes wünschen, dann [fügen Sie bitte Ihre Arbeit bis jetzt zu Ihrer Frage hinzu] (https://stackoverflow.com/posts/45577119/edit) und ich werde meine zurückziehen Stimmen schließen – ghoti

+0

Holen Sie sich das Buch Effective Awk Programming, 4. Auflage, von Arnold Robbins - es wird Ihnen beibringen, wie Sie mit awk tun, was Sie wollen. –

Antwort

3

Einfache sed Ansatz:

sed 's/\([A-Z]\) \([A-Z]\)/\1\2/g' file 

Oder awk Alternative:

awk '{ r=$1; for(i=2;i<=NF;i+=2) r=r FS $i$(i+1); print r }' file 

Der Ausgang (für beide Ansätze):

id1 AB CT GA BC 
id2 GV LP AJ MT 
+0

Danke! Es funktioniert perfekt –

+0

@GersonOliveiraJunior, du bist willkommen! – RomanPerekhrest

1
perl -np -e 's/ ([A-Z]) ([A-Z])/ $1$2/g' <FILENAME 

Ersetzen Sie FILENAME durch den Namen der Eingabedatei.

+0

Wenn ich darüber nachdenke, sind die Großbuchstaben in Ihrem Beispiel wahrscheinlich Platzhalter, alles durch Leerzeichen getrennt. Wenn das der Fall ist, ersetzen Sie "[A-Z]" durch "[^ \ t]" (alles andere als Leerzeichen oder Tabulatorzeichen). Die Verwendung von \ s, \ w, \ d usw. ist problematisch. Der Begriff "Leerzeichen", "Wortzeichen", "Ziffern" ist abhängig vom Gebietsschema. –

2

andere sed

$ sed -r 's/\s(\w+)\s(\w+)/ \1\2/g' file 

id1 AB CT GA BC 
id2 GV LP AJ MT 

funktioniert auch, wenn Sie Ihre ID-Feld den gleichen Zeichensatz hat.

1
awk '{for(i=1;i<=NF;i++){printf (i%2)?$i" ":$i}printf RS}' file 

Wenn die Zahl des Feldes ungerade ist, Druck $i" ", sonst drucken $i

Verwandte Themen