Ich habe eine Datendatei mit zwei Zahlenspalten:
Eingabedatei
4.182 4.1843
4.184 4.2648
4.2281 4.0819
4.2204 4.1676
4.0482 4.1683
4.0156 4.2895
4.4504 5.2369
4.3776 4.4979
4.3797 4.1372
4.1411 4.0528
Ich muss eine Spalte mit Zahlen mit gleichmäßigem Abstand in die Eingabedatendatei einfügen. Beispielsweise wurde in die Ausgabe eine Spalte mit Zahlen mit einem Abstand von 5 eingefügt, also sind die Zahlen 1, 6, 11, 16 usw.
Ausgabe
1 4.182 4.1843
6 4.184 4.2648
11 4.2281 4.0819
16 4.2204 4.1676
21 4.0482 4.1683
26 4.0156 4.2895
31 4.4504 5.2369
36 4.3776 4.4979
41 4.3797 4.1372
46 4.1411 4.0528
Antwort1
- Erstellen Sie mit eine Indexspalte in der Originaldatendatei
pr -t -n
. - Erstellen Sie die Indexdaten, die als neue Spalte eingefügt werden sollen, wobei jede Zeile der Indexdaten durch die Zeilennummer indiziert wird.Dazu habe ich unten eine kleine Bash-Funktion verwendet.
- Werden Sie Mitglied derIndexspaltemit demDatenmit
join
.
Hier ist ein Bash-Skript zur Demonstration:
#!/usr/bin/env bash
# insert-counts.sh
cols='/tmp/cols'
cat <<'EOF' | pr -t -n >$cols
4.184 4.2648
4.2281 4.0819
4.2204 4.1676
4.0482 4.1683
4.0156 4.2895
4.4504 5.2369
4.3776 4.4979
4.3797 4.1372
4.1411 4.0528
EOF
# gen_index START NUM INC
gen_index() {
local start="$1" num="$2" inc="$3"
local x
for ((x = 0; x < num; x++)); do
printf "%2d %4d\n" $(( x + 1 )) $(( start + (x * inc) ))
done
}
lines=`wc -l <$cols`
gen_index 1 $lines 5 |
join -o 1.2 -o 2.2 -o 2.3 - $cols |
awk '{printf("%4d %8.4f %8.4f\n",$1,$2,$3);}'
Und hier ist die Ausgabe:
$ ./insert_counts.sh
1 4.1840 4.2648
6 4.2281 4.0819
11 4.2204 4.1676
16 4.0482 4.1683
21 4.0156 4.2895
26 4.4504 5.2369
31 4.3776 4.4979
36 4.3797 4.1372
41 4.1411 4.0528
Antwort2
Wenn ich Ihre Indexgenerierung richtig verstehe, dann
awk '{print 5*(NR-1)+1" "$0}' yourfile > oufile
sollte es tun. Wenn Sie eine schönere Ausgabe wünschen, können Sie printf
stattdessen z. B. verwenden
$ awk '{printf "%-3d %s\n", 5*(NR-1)+1, $0}' yourfile
1 4.184 4.2648
6 4.2281 4.0819
11 4.2204 4.1676
16 4.0482 4.1683
21 4.0156 4.2895
26 4.4504 5.2369
31 4.3776 4.4979
36 4.3797 4.1372
41 4.1411 4.0528