Fórumok
Tudtok ebben segíteni?
Van 2 adatbázis, txt kiterjesztésű file-om.
file1 tartalma soronként: hash:salt:ID
file2 tartalma soronként: username:hash:salt
Szeretném a file2-ből a file1-hez hozzáadni a username mezőt, ott ahol a hash:salt egyezik
file3 így kellene, hogy kinézzen: username:hash:salt:ID
Azaz, ahol mindkét file-ban egyezik a hash:salt, az kerüljön át a 3 file-ba, úgy hogy sor elejére a megfelelő username, végére pedig a megfelelő ID kerüljön.
Több ezer sorról van szó, file1 kevesebb sort tartalmaz.
Amit próbáltam,:
join <(sort -t":" -k 1 file1.txt) <(sort -t":" -k 2 file2.txt) > file3.txt
Köszönöm.
Hozzászólások
Ha esetleg jó Pythonban is (csak futólag teszteltem):
--
eutlantis
Köszönöm. Ez az üzenet mit jelent? Ezt kaptam futattáskor.
Traceback (most recent call last):
File "python.sh", line 21, in
user,hashi,salt = line.split(':')
ValueError: too many values to unpack
Valoszinű van a fájlodban üres sor vagy olyan ami nem tartalmaz kettő ":" karaktert.
Ha azokat kitörlöd akkor jó lesz.
Ok. Köszönöm.
Próbáltam ezt is, de valamiért üres file az eredmény:
join -1 1 -2 2 -t: -o2.1,2.2,2.3,1.3 <(sort -t":" -k 1,2 file1.txt) <(sort -t":" -k 2,3 file2.txt) > file3.txt
Több ezer soros mindkét file. Ha próbaképpen kivágok mindkét file-ból pár sort és azokat mentve összehasonlítom akkor működik a join command. A több ezres sort tartalmazó file-okkal viszont nem.
Ez bezavarhat esetleg?
file1.txt ASCII text
file2.txt data
Ha a file1 nem túl nagy ahhoz, hogy berántsuk a memóriába, akkor én awk-val támadnék:
Próbáltam. Hiányzik az output-ból az id mező valamiért.
A kérédsem itt is fent van, mintákkal. Ide nem engedte a hash:salt:id részeket betenni.
http://www.unix.com/unix-for-beginners-questions-and-answers/273676-add…
Nekem a felpakolt példáddal szépen működik. A Mercenary14 és a rcmonster112 usereknél is oda kerül az ID.
Debian stretch alatt próbáltam.
Esetleg nézd meg egy kicsit szebb szintaxissal:
Köszönöm szépen. Működik.
Meg kell tanulnom az awk használatát, könnyebbé teszi a munkát...:)