Puncte:1

Citiți dintr-un fișier text și obțineți rândul corespunzător dintr-un fișier csv

drapel us

Am un fișier text numit train_ids.txt, și un fișier csv numit set de date.csv.

Fișierul text conține ID-uri pe aceasta cale:

dish_1.png
dish_5.png

Fișierul csv de intrare are o mulțime de coloane și rânduri, dar primul col conține id-uri. Primul col este următorul:

farfurie_1 
farfurie_2 
farfurie_3 
farfurie_4 
farfurie_5 

Vreau să scriu un script bash pentru a citi ID-urile din fișierul text și să obțin rândul corespunzător care are aceste ID-uri și apoi să pun întregul rând într-un fișier csv nou pentru a fi rezultat.

Deci fișierul csv de ieșire ar trebui să fie așa:

farfurie_1 | orice_1
farfurie_5 | orice_5

Note:

  • În fișierul csv de ieșire, vreau să spun prin tot ceea ce întregul rând
  • Trebuie să eliminăm .png din fișierul text ids pentru a putea căuta
  • Întregul fișier text include ID-uri doar așa cum s-a menționat, nu există linii diferite
  • Fișierul text IDs este sortat, dar fișierul csv nu este sortat
  • ID-urile din fișierul text sunt cu siguranță în fișierul csv, așa că nu trebuie să sărim sau să raportăm nimic.

Nu stiu cum sa fac, ma puteti ajuta?

drapel hr
... similar cu [Găsiți potrivirea în fișierul csv](https://askubuntu.com/a/1213425/178692)
terdon avatar
drapel cn
Vă rugăm să [editați] întrebarea dvs. și să ne oferiți mai multe detalii. Ce este „orice”? Întregul rând o al fișierului csv? Trebuie să eliminăm „.png” din „id”-uri? Pot exista si alte extensii? Pot exista mai multe `.` într-un nume (de exemplu, `foo.png.bar`)? Fișierele vor fi sortate astfel încât linia N dintr-un fișier să corespundă cu linia N din celălalt? Ar trebui să fie sărite sau raportate rândurile fără nicio intrare potrivită?
Abanoub Asaad avatar
drapel us
@terdon Tocmai a actualizat întrebarea cu note suplimentare.
terdon avatar
drapel cn
Mulțumim, dar vă rugăm să ne dați un exemplu pe care îl putem folosi pentru a ne testa soluțiile. Ne-ați dat un fișier ID-uri cu doar două linii și apoi un fișier csv cu un singur câmp, așa că nu putem produce rezultatul dorit pe baza intrării dvs. De asemenea, afișați un fișier ids _nesortat_ și un fișier „csv” _sortat_, dar apoi spuneți că este de fapt opusul. În cele din urmă, ce definește un câmp în csv-ul tău? Este virgule? Spatii? Filele? Câmpurile sunt citate? Toate acestea sunt importante pentru a vă oferi ceva ce puteți utiliza cu adevărat.
Puncte:1
drapel cn

Nu aveți nevoie de un script pentru asta, doar folosiți pastă. Nu ne-ați arătat cum sunt datele dvs. reale, așa că bănuiesc că aveți ceva de genul acesta:

$ cat train_ids.txt 
dish_1.png
dish_2.png
dish_3.png
dish_4.png
dish_5.png

și

$ cat dataset.csv
dish_2, oricare ar fi2
dish_5, orice5
farfurie_4, orice4
farfurie_3, orice3
dish_1, oricare ar fi1

Dacă da, puteți obține rezultatul dorit cu:

$ join -t, <(sed 's/\.png$//' train_ids.txt) <(sort dataset.csv)
dish_1, oricare ar fi1
dish_2, oricare ar fi2
farfurie_3, orice3
farfurie_4, orice4
dish_5, orice5

Și pentru a obține acest lucru ca fișier separat prin conducte în loc de csv (fișier separat prin virgulă), puteți face:

$ join -t, <(sed 's/\.png$//' train_ids.txt) <(sort dataset.csv) | sed 's/, / | /'
farfurie_1 | oricare ar fi1
farfurie_2 | oricare ar fi2
farfurie_3 | oricare ar fi3
farfurie_4 | oricare ar fi4
farfurie_5 | orice5

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.