Jag måste plotta data med Gnuplot i 3 CSV-filer.

Vanligt , Jag använder följande kod för att plotta från två 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 

CSV-filerna finns i tre olika kataloger. Data börjar vid rad 8 och jag måste ta ut " och , tecken och sortera data efter kolumn 19.

Jag vet inte hur jag ska utöka den här koden för att klistra in 3 olika CSV-filer som gör samma sak, sort, tail -n+8 och tr -kommandon och få en slutlig .txt -fil med resultatet.

Svar

Jag är inte säker på hur Gnuplot spelar in i detta specifikt, men om du letar efter ett sätt att tail flera filer du kan göra det helt enkelt genom att skicka sina namn på kommandoraden.

Den enda gotcha är att tail separerar utgångarna med en rubrik för enklare mänsklig visning om du inte lägg till alternativet -q:

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

Så vitt jag kan se kan du hoppa över processbyten och multipel (r e) sorterar helt enkelt

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

Kommentarer

  • Tack. Din kod är enkel och fungerar bra. Jag skulle vilja fråga dig hur skulle jag kunna välja ett antal rader i den andra filen, till exempel från 8-raden till 470-raden. Jag kan använda sed -n -e '8,470p', men jag vet inte hur jag ska ändra din lösning. Jag tror att problemet är att jag behöver det här valet av intervall i bara en av de tre filerna.
  • @ user1993416 förmodligen skulle den enklaste ändringen vara tail -q -n+8 file1 <(head -n 470 file2) file3
  • Slutligen är mina resultat i fem filer och två av dem, jag måste göra head -n tills någon rad. Kan jag skriva något som tail -q -n+8 file1 <(head -n470 file2 <(head -n380 file3)) file4 file5?
  • Jag har lagt upp en ny fråga med klistra in de 5 filerna. Hälsningar.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *