Aufteilen von Zeilen aus einer TXT-Datei in Excel-Spalten in Bash

Aufteilen von Zeilen aus einer TXT-Datei in Excel-Spalten in Bash

Ich habe eine Textdatei (lines.txt) wie diese:

ab.qq
1
2
3
cd.qq
3
4
5
ef.qq
7
8
9

Und ich versuche, von jeder vierten Zeile in eine andere Spalte in einer Excel-/CSV-Datei zu wechseln, im Wesentlichen das, was mit diesem Bash-Skript gedruckt wird:

#!/bin/bash
split -l 4 lines.txt outsq
paste -d ' ' outsq*


ab.qq  cd.qq ef.qq
1  3  7 
2  4  8 
3  5  9 

Ich wäre für Hilfe beim Schreiben in eine Excel-/CSV-Datei dankbar. Auch jede andere Möglichkeit, die zum Ergebnis führt (ohne Teilen/Einfügen), ist auf jeden Fall in Ordnung.

Antwort1

Der rs(RtSDas ursprünglich von BSD stammende Dienstprogramm hape ist für derartige Dinge nützlich.

Zum Beispiel:

$ rs -e -t 4 0 < lines.txt
ab.qq  cd.qq  ef.qq
1      3      7
2      4      8
3      5      9

Wo

  • -ebesagt, dass jede Eingabezeile als Element behandelt werden soll
  • -ttransponiert Spalten in Zeilen
  • 4 0gibt 4 Zeilen und beliebig viele Spalten aus

Die Optionen -cund -Clegen die Eingabe- bzw. Ausgabetrennzeichen fest. Für die CSV-Ausgabe können Sie also Folgendes verwenden:

$ rs -etC, 4 0 < lines.txt
ab.qq,cd.qq,ef.qq,
1,3,7,
2,4,8,
3,5,9,

rsist als gleichnamiges Paket im Ubuntu- universeRepository verfügbar.


Alternativ könnten Sie in awk so etwas tun:

$ awk '
    {a[NR%4] = a[NR%4] == "" ? $0 : a[NR%4] "," $0} 
    END {for(i=1;i<=4;i++) print a[i%4]}
' lines.txt
ab.qq,cd.qq,ef.qq
1,3,7
2,4,8
3,5,9

verwandte Informationen