The UNIX and Linux Forums  


Go Back   UNIX och Linux Forum > Upp Forum > Shell-programmering och Skript
.
google unix.com



Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här.

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
Läsa en fil och skriva filnamnet till ett param fil. thebeginer UNIX för avancerade & Expertanvändare 1 10-05-2007 05:38
Spilt excel-fil i UNIX Soumya Dash Shell-programmering och Skript 1 09-25-2006 03:56
Läsa filnamn från en fil och verkställande relativa fil från shell script anushilrai Shell-programmering och Skript 4 03-10-2006 05:25

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 11-20-2007
deep_kol deep_kol is offline
Registered User
  
 

Join Date: juni 2007
Inlägg: 14
Hur spilld en fil

Hej,
Jag har en fil, abc.txt. gilla

abc.txt
\u003d\u003d\u003d\u003d\u003d\u003d\u003d
KOKRS EL01 RLDNR M2 RRCTY 1
Company Code 100
Verksamhetsåret 2007
Version PW3
Valuta USD
1 2 3 4
1 2 3 4
BA Kontonummer Profit Center MRA Jan-TC februari-TC
Ett 93010000 1530 152 1429793
Ett 93010000 9999 403 0 0 0
Ett 93010000 9999 404 -142
Ett 93010000 9999 411 0 0 0
Ett 93010000 9999 465 214538 214538 6114330
Ett 93010000 9999 487 0 -207918
Ett 93010000 471 502 0 0 0
Ett 93010000 9999 502 0 0 0

KOKRS EL01 RLDNR M2 RRCTY 1
Company Code 152
Verksamhetsåret 2007
Version PW3
Valuta SEK
1 2 3 4
1 2 3 4
BA Kontonummer Profit Center MRA Jan-TC februari-TC
Ett 93010000 1200 152 0 0 0
Ett 93010000 9999 152 -57885 -16511 -537549
KOKRS EL01 RLDNR M2 RRCTY 1
.......
..... 500 lines like this

Jag måste spillt denna fil i olika filer enligt företaget kod.

ex:

abc_COMCODE_100.txt
\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d
KOKRS EL01 RLDNR M2 RRCTY 1
Company Code 100
Verksamhetsåret 2007
Version PW3
Valuta USD
1 2 3 4
1 2 3 4
BA Kontonummer Profit Center MRA Jan-TC februari-TC
Ett 93010000 1530 152 1429793
Ett 93010000 9999 403 0 0 0
Ett 93010000 9999 404 -142
Ett 93010000 9999 411 0 0 0
Ett 93010000 9999 465 214538 214538 6114330
Ett 93010000 9999 487 0 -207918
Ett 93010000 471 502 0 0 0
Ett 93010000 9999 502 0 0 0


abc_COMCODE_152.txt
\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d
KOKRS EL01 RLDNR M2 RRCTY 1
Company Code 152
Verksamhetsåret 2007
Version PW3
Valuta SEK
1 2 3 4
1 2 3 4
BA Kontonummer Profit Center MRA Jan-TC februari-TC
Ett 93010000 1200 152 0 0 0
Ett 93010000 9999 152 -57885 -16511 -537549



Vänlig föreslå mig hur läckte igenom Unixterminal program.

Tack på förhand!
  #2 (permalänk)  
Old 11-20-2007
vgersh99's Avatar
vgersh99 vgersh99 is online now Forum Staff  
Moderator
  
 

Join Date: februari 2005
Ort: Boston, MA
Inlägg: 5.131
nawk-f deep.awk abc.txt

deep.awk:

Kod:
BEGIN {
  FS=RS=""

  prefix=substr(FILENAME, 1, index(FILENAME, ".")-1)
}
{
   root="unknown"
   for(i=1; i<=NF; i++)
      if ($i ~ "Company Code") {
         n=split($2, a, " ")
         root=a[n]
         break
      }
   out= prefix "_COMCODE_" root ".txt"
   print > out
   close(out)
}

  #3 (permalänk)  
Old 11-20-2007
drl's Avatar
varselljus drl is offline Forum Advisor  
Registered User
  
 

Join Date: april 2007
Ort: Saint Paul, MN USA / BSD, CentOS, Debian, OS X, Solaris
Inlägg: 713
Hej.

Kommando csplit utformades för detta:

Kod:
#!/usr/bin/env sh

# @(#) s1       Demonstrate context split, csplit.

set -o nounset
echo

debug=":"
debug="echo"

## Use local command version for the commands in this demonstration.

echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version bash csplit

echo

# Remove debris files.
rm -f xx*

FILE=${1-data1}

csplit --keep-files -z $FILE "/Company Code/-1" {*}

echo
echo " Files created:"
ls xx*

SAMPLE=xx01
echo
echo " Sample $SAMPLE:"
cat -n $SAMPLE

exit 0

Produktion:

Kod:
% ./s1

(Versions displayed with local utility "version")
GNU bash 2.05b.0
csplit (coreutils) 5.2.1

1
379
218
81

 Files created:
xx00  xx01  xx02  xx03

 Sample xx01:
     1  KOKRS EL01 RLDNR M2 RRCTY 1
     2  Company Code 100
     3  Fiscal Year 2007
     4  Version PW3
     5  Currency USD
     6  1 2 3 4
     7  1 2 3 4
     8  BA Account number Profit Ctr MRA Jan-TC Feb-TC
     9  A 93010000 1530 152 1429793
    10  A 93010000 9999 403 0 0 0
    11  A 93010000 9999 404 -142
    12  A 93010000 9999 411 0 0 0
    13  A 93010000 9999 465 214538 214538 6114330
    14  A 93010000 9999 487 0 -207918
    15  A 93010000 471 502 0 0 0
    16  A 93010000 9999 502 0 0 0
    17

Se Mannen csplit for details ... Skål, varselljus
  #4 (permalänk)  
Old 11-20-2007
vgersh99's Avatar
vgersh99 vgersh99 is online now Forum Staff  
Moderator
  
 

Join Date: februari 2005
Ort: Boston, MA
Inlägg: 5.131
Det måste vara ett GNU-ed csplit - inte flyga på Solaris.
Plus namnkonventionen för skapade filer är inte vad OP ville.
Cool idé om - like it!
  #5 (permalänk)  
Old 11-20-2007
drl's Avatar
varselljus drl is offline Forum Advisor  
Registered User
  
 

Join Date: april 2007
Ort: Saint Paul, MN USA / BSD, CentOS, Debian, OS X, Solaris
Inlägg: 713
Hej, vgersh99.
Citat:
Ursprungligen postat av vgersh99 View Post
Det måste vara ett GNU-ed csplit - inte flyga på Solaris.
Plus namnkonventionen för skapade filer är inte vad OP ville.
Cool idé om - like it!
Tack för heads-up. Ja, det är GNU-coreutils csplit. Jag är säker på att tillbaka när jag använder Solaris dagligen att csplit fanns. Om det inte fungerar, hur gick det misslyckas?

Jag provade på en FreeBSD 4,11 system, och det har bara en anemic dela med ett mönster-match inlagd, men csplit (förekommer inte heller på OS X). Den GNUlånga optioner kan oftast ersättas med enkel-dash alternativ.

Det skulle ta en annan process för att extrahera strängen att göra filnamn, men det är en bra övning för OP ... Skål, varselljus
  #6 (permalänk)  
Old 11-20-2007
deep_kol deep_kol is offline
Registered User
  
 

Join Date: juni 2007
Inlägg: 14
Hej Vänner,
Tack för din hjälp.
Jag är nybörjare i Unix. Jag arbetar i ksh och csh.
nu kan youuplease förklara hur man ska utföra den.
abc.txt är mitt filnamn.

DRL din lösning verkar vara okej. men jag är inte i stånd att utföra den.
  #7 (permalänk)  
Old 11-20-2007
radoulov's Avatar
radoulov radoulov is online now Forum Staff  
missbrukare
  
 

Join Date: Jan 2007
Ort: Варна, България / Milano, Italia
Inlägg: 2.926
Ytterligare ett:


Kod:
awk 'FNR == 1 {
	pfx = substr(FILENAME, 1, 3) "_COMCODE_"
	}	
/^KOKRS/ {
	fn = 0
}
/^Company Code/ {
	close(fn)
	fn = pfx $3 ".txt"
	$0 = prev RS $0
	}
fn {
	print > fn
}
{
	prev = $0
}' abc.txt

Använd nawk på Solaris.

Med några Awk utföranden (som XPG Awk på Solairs),
Du borde vara mer explicit:


Kod:
awk 'FNR == 1 {
	pfx = substr(FILENAME, 1, 3) "_COMCODE_"
	}	
/^KOKRS/ {
	fn = 0
}
/^Company Code/ {
	close(fn)
	fn = pfx $3 ".txt"
	$0 = prev RS $0
	}
fn != 0 {
	print > fn
}
{
	prev = $0
}' abc.txt


PS vgersh99's prefix är mer förnuftigt, naturligtvis.

Senast redigerad av radoulov; 11-20-2007 at 06:38.. Anledning: ps
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 01:05.


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