2012-04-12 13 views
1

Ich habe file.txt 3 Spalten.Merge Spalten schneiden & Katze

1 A B 
2 C D 
3 E F 

Ich möchte 2 # 1 & # 3 als Ende # hinzuzufügen. Ergebnis sollte wie folgt aussehen:

1A 
2C 
3E 
1B 
2D 
3F 

Ich tue dies durch

cut -f 1,2 > tmp1 
cut -f 1,3 > tmp2 
cat *tmp * > final_file 

Aber ich bin immer wiederholte Zeilen! Wenn ich die endgültige Ausgabe überprüfen:

cat * | sort | uniq -d

gibt es viele wiederholte Linien und es gibt keine in der primären Datei.

Kann jemand einen anderen Weg vorschlagen, dies zu tun? Ich glaube, der, den ich versuche zu verwenden, ist zu komplex und deshalb bekomme ich so eine komische Ausgabe.

Antwort

1

cat file.txt | awk '{print $1 $2 "\n" $1 $3};'

+0

Wie awk mit Tab getrennt? – PoGibas

+0

Ich habe es herausgefunden. Vielen Dank! – PoGibas

+0

Ich habe nicht gesehen, dass Sie col1co2 und col1col3 wollten. Ich habe meine Antwort geändert, um das zu tun. Um Ihre Frage zu beantworten, ist der Grund, warum ich awk gewählt habe, dass standardmäßig Leerzeichen als Trennzeichen verwendet werden, was solche Dinge viel einfacher macht. –

1

Behält die Reihenfolge mit einem Durchlauf durch die Datei

awk ' 
    {print $1 $2; pass2 = pass2 sep $1 $3; sep = "\n"} 
    END {print pass2} 
' file.txt 

Der Grund dafür (cat tmp* * > final_file) falsch ist:

  • I nehmen *tmp ein Tippfehler
  • erweitert werden
  • Ich gehe davon aus, wie dieser Punkt das Verzeichnis enthält nur „tmp1“ und „tmp2“

Blick auf, wie diese Platzhalter war:

  • tmp* erweitert zu „tmp1 "und "tmp2"
  • * erweitert auch auf "tmp1" und "tmp2"

So Ihre com mand line wird cat tmp1 tmp2 tmp1 tmp2 > final_file und damit erhalten Sie alle duplizierten Zeilen.

+0

Es funktioniert. Keine Duplikate, aber heiß, um Tab getrennt zu bekommen? – PoGibas

Verwandte Themen