Ich habe eine Datei wie:Bash: extrahieren Spalte Leerzeilen als Trennzeichen verwenden
1
2
3
4
5
a
b
c
d
e
Und wollen sie setzen mag:
1 a
2 b
3 c
4 d
5 e
Gibt es einen schnellen Weg, um es in bash zu tun?
Ich habe eine Datei wie:Bash: extrahieren Spalte Leerzeilen als Trennzeichen verwenden
1
2
3
4
5
a
b
c
d
e
Und wollen sie setzen mag:
1 a
2 b
3 c
4 d
5 e
Gibt es einen schnellen Weg, um es in bash zu tun?
pr
ist das Werkzeug für columnizing Daten zu verwenden:
pr -s" " -T -2 filename
das ist wunderbar! Vielen Dank! –
Beachten Sie, dass dies die GNU-Implementierung von 'pr' voraussetzt. – chepner
Mit paste
und Prozess Substitution:
$ paste -d " " <(sed -n '1,/^$/{/^$/d;p}' file) <(sed -n '/^$/,${//!p}' file)
1 a
2 b
3 c
4 d
5 e
einfache Bash-Skript, das macht den Job:
nums=()
is_line=0
cat ${1} | while read line
do
if [[ ${line} == '' ]]
then
is_line=1
else
if [[ ${is_line} == 0 ]]
then
nums=("${nums[@]}" "${line}")
else
echo ${nums[0]} ${line}
nums=(${nums[*]:1})
fi
fi
done
Run es wie folgt aus: ./script filename
Beispiel:
$ ./script filein
1 a
2 b
3 c
4 d
5 e
$ rs 2 5 <file | rs -T
1 a
2 b
3 c
4 d
5 e
Wenn Sie möchten, dass zusätzliche Trennzeichen Raum ab, -g1
im letzteren rs
verwenden. Erklärt:
file
in 5 Spalten und 2 Zeilen-T
transponieren
alles versucht? – Inian
kopieren Sie in libreoffice calc, um Spalten zu trennen und zurück in Datei zu kopieren .... –