Trebuie să trasez cu Gnuplot datele conținute în 3 fișiere CSV.

În mod obișnuit , Folosesc următorul cod pentru a trasa din 2 fișiere CSV:

$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 

CSV-urile sunt în trei directoare diferite. Datele încep la rândul 8 și trebuie să scot caracterele " și , și să sortez datele după coloana 19.

Nu știu cum să extind acest cod pentru a lipi 3 CSV diferite care fac același lucru, sort, tail -n+8 și tr și obțineți un fișier final .txt cu rezultatul.

Răspunde

Nu sunt sigur cum joacă Gnuplot în acest sens, dar dacă căutați o modalitate de a tail fișiere multiple poate face acest lucru pur și simplu trecând numele lor pe linia de comandă.

Singurul lucru este că tail va separa ieșirile cu un antet pentru o vizualizare mai ușoară a omului, cu excepția cazului în care adăugați opțiunea -q:

 -q, --quiet, --silent never output headers giving file names 

Deci, din câte văd, puteți sări peste substituțiile procesului și multiplele (r e) sortează pur și simplu

tail -q -n+8 ../Q1a/sim_Q1.csv ../Q1b/sim_Q1.csv ../Q1c/sim_Q1.csv | tr ""," " " | sort -nk19 

Comentarii

  • Vă mulțumim. Codul dvs. este simplu și funcționează bine. Aș dori să vă întreb cum aș putea selecta un interval de rânduri în al doilea fișier, de exemplu de la rândul 8 la rândul 470. Aș putea folosi sed -n -e '8,470p', dar nu știu cum să vă schimb soluția. Cred că problema este că am nevoie de această selecție a intervalului într-unul dintre cele trei fișiere.
  • @ user1993416 probabil cea mai simplă modificare ar fi tail -q -n+8 file1 <(head -n 470 file2) file3
  • În cele din urmă, rezultatele mele sunt în 5 fișiere și 2 dintre ele, trebuie să fac head -n până la un rând. Pot scrie ceva de genul tail -q -n+8 file1 <(head -n470 file2 <(head -n380 file3)) file4 file5?
  • Am postat o nouă întrebare cu lipirea celor 5 fișiere. Cu stimă.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *