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 som tail -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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *