The UNIX and Linux Forums  

Go Back   UNIX och Linux Forum > Upp Forum > UNIX for Dummies Frågor & Svar
.
google unix.com



UNIX for Dummies Frågor & Svar Om du inte är säker på var att skriva en UNIX eller Linux fråga efter det här. Alla UNIX-och Linux-nybörjare välkomna!

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
Uppdelning fil baserat på antal rader wahi80 Shell-programmering och Skript 2 06-03-2008 10:38
Uppdelning en fil baserat på uppgifter i ett annat ärende er_ashu Shell-programmering och Skript 2 05-12-2008 05:34
dela upp en post och lägga till en post i en fil rsolap Shell-programmering och Skript 1 08-13-2007 02:58
delning filer baserade på text i filen matrix1067 Shell-programmering och Skript 1 01-30-2006 08:45
Uppdelning en fil baserat på vissa villkor och namnge dem srivsn Shell-programmering och Skript 1 12-07-2005 11:27

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Sök i denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 05-12-2008
er_ashu er_ashu is offline
Registered User
  
 

Join Date: april 2007
Inlägg: 50
Uppdelning en fil baserat på titelinformation synd en annan fil

Alla,

Vi får en fil med ett stort antal poster (poster kan variera) och vi måste dela upp det i två akter baseras på en annan fil. t.ex.

Fil1:

UHDR 2008112
"25.187", "00000022", "00" ,21-APR-1991, "", "D", -000.000.519, 0000000000, "C",, 000,000,000, +000000000,000000000, "2", "" ,21-APR-1991
"8Y3H4", "0000004H", "00" ,16-APR-1992, "", "H", -001.621.119, 0000000000 "C",, 000,000,000, +000000000,000000000, "2", "" ,21-APR-1991
"95Y8U", "02100971", "00" ,03-MAR-1991, "", "H", -000.004.499, 0000000000, "",, 000,000,000, +000000000,000000000, "2", "USA" ,21-APR-1991
"24.567", "02100973", "00" ,26-SEP-1991, "", "H", -000.000.362, 0000000000, "",, 000,000,000, +000000000,000000000, "2", "USA" ,21-APR-1991
--
--
--
UTRL 00144700


Fil2:
2518720080512
2456720080512
1256720080512
8WE7820080512
8Y3H020080512
8Y3H220080512
8Y3H420080512
8Y3H620080512
--
--
--
--

Om de första 5 tecknen i filen 2 matchas med tecken 2-6 i fil1, bör skilja dessa register och omsätta dem i en annan fil och resten av posterna bör kopieras till en andra akt.

Jag försökte klippa kommandot men eftersom fil1 är ganska stor, det tar mycket tid att sätta värden i en variabel och sedan jämföra det.

Finns det något sätt som kan göra ovanstående uppgift ganska snabbt.

Please help det behövs omgående.

Tack i förskott.
  #2 (permalänk)  
Old 05-13-2008
eran era is offline Forum Advisor  
Herder av Useless Cats (På sabbatsår)
  
 

Join Date: mars 2008
Ort: / det är / / bara / bin / sh
Inlägg: 3652
Om din grep kan läsa mönster från en fil (som GNU grep), prova något sådant.


Kod:
cut -c1-5 file2 >patterns
grep -f patterns file1 >matches
grep -f patterns -v file1 >nonmatches

Det finns utrymme för förbättringar, så att de mönster alltid matcha i början av raden, etc. Du kan ersätta den första raden med något som


Kod:
sed 's/^\(.....\).*/^"\1",/' file2 >patterns

Detta lägger till dubbla citattecken runt söksträngen och lägger till ett kommatecken bakom sig och specialtecken "^" innan det, vilket innebär match först i början av raden.

Senast redigerad av era; 05-13-2008 vid 04:28.. Orsak: Förklara ändrade mönster
  #3 (permalänk)  
Old 05-13-2008
Franklin52 Franklin52 is offline Forum Staff  
Moderator
  
 

Join Date: februari 2007
Inlägg: 4.345
Med awk:


Kod:
awk 'NR==FNR{a[substr($0,1,5)];next}
NF<3{next}
substr($1,2,5) in a {print > "file1";next}
{print > "file2"}' file2 file1

Hälsningar
  #4 (permalänk)  
Old 05-13-2008
er_ashu er_ashu is offline
Registered User
  
 

Join Date: april 2007
Inlägg: 50
Tack Franklin och ERA.

Franklin,
Jag fpossible, kan du förklara wha tthe torsk EIS gör. Jag är en awk nybörjare och detta kommer att hjälpa mig att tolka saker bättre.
Också, vad gör jag om jag inte vill ändra originalfilerna.

Tack igen.
  #5 (permalänk)  
Old 05-13-2008
Franklin52 Franklin52 is offline Forum Staff  
Moderator
  
 

Join Date: februari 2007
Inlägg: 4.345

Kod:
awk 'NR==FNR{a[substr($0,1,5)];next}

Gets första 5 tecknen i den första filen i matrisen.


Kod:
 NF<3{next}

Ignorera linjer med mindre än 3 fält (den första och sista raden)


Kod:
 substr($1,2,5) in a {print > "file1";next}

Om 5 tecken efter citat i matris skriva till file1 ..


Kod:
 {print > "file2"}

... else print till fil2


De ursprungliga filerna bör inte ändras.

Hälsningar

Senast redigerad av Franklin52; 05-13-2008 at 02:03.. Orsak: språklig korrigering
  #6 (permalänk)  
Old 05-13-2008
er_ashu er_ashu is offline
Registered User
  
 

Join Date: april 2007
Inlägg: 50
Franklin,

You rock.
Men när jag använder den här:


Kod:
awk 'NR==FNR{a[substr($0,1,5)];next}
NF<3{next}
substr($1,2,5) in a {print > "matched.txt";next}
{print > "notmatched.txt"}' file2 file1

Jag ser bara matched.txt fil men inte "notmatched.txt". Har jag missat något här?
Closed Thread

Komihåglista

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 08:07.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0