Jeg skal plotte dataene indeholdt i 3 CSV-filer med Gnuplot.
Almindeligt , Jeg bruger følgende kode til at plotte fra 2 CSV-filer:
$datablock << EOD `cat ../Q1a/sim_Q1.csv <(tail -n+8 ../Q1b/sim_Q1.csv | tr ""," " " | sort -nk19 )| tail -n+8 | tr ""," " " | sort -nk19 > ../Q1a/Q6_ressult.txt` EOD set print "|bash -x" print $datablock set print
CSVerne findes i tre forskellige kataloger. Dataene starter ved række 8, og jeg skal fjerne "
og ,
tegnene og sortere dataene efter kolonne 19.
Jeg ved ikke, hvordan man udvider denne kode til at indsætte 3 forskellige CSVer, der gør det samme, sort
, tail -n+8
og tr
kommandoer, og få en endelig .txt
fil med resultatet.
Svar
Jeg er ikke sikker på, hvordan Gnuplot spiller specifikt ind i dette, men hvis du “leder efter en måde at tail
flere filer på dig kan gøre det ganske enkelt ved at videregive deres navne på kommandolinjen.
Den eneste gotcha er, at tail
adskiller outputene med et header for lettere menneskelig visning, medmindre du tilføj -q
mulighed:
-q, --quiet, --silent never output headers giving file names
Så vidt jeg kan se, kan du springe proceserstatninger og multiple (r e) sorter simpelthen
tail -q -n+8 ../Q1a/sim_Q1.csv ../Q1b/sim_Q1.csv ../Q1c/sim_Q1.csv | tr ""," " " | sort -nk19
Kommentarer
- Tak. Din kode er enkel og fungerer fint. Jeg vil gerne spørge dig, hvordan kunne jeg vælge et række af rækker i den anden fil, for eksempel fra 8 række til 470 række. Jeg kunne bruge
sed -n -e '8,470p'
, men jeg ved ikke, hvordan jeg skal ændre din løsning. Jeg tror, problemet er, at jeg har brug for dette intervalvalg i kun en af de tre filer. - @ user1993416 sandsynligvis ville den enkleste ændring være
tail -q -n+8 file1 <(head -n 470 file2) file3
- Endelig er mine resultater i 5 filer og 2 af dem, jeg er nødt til at lave
head -n
indtil en række. Kan jeg skrive noget somtail -q -n+8 file1 <(head -n470 file2 <(head -n380 file3)) file4 file5
? - Jeg har sendt et nyt spørgsmål med indsætningen af de 5 filer. Hilsen.