![]() |
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Reading a file and writing the file name to a param file. | thebeginer | UNIX for Advanced & Expert Users | 1 | 10-05-2007 04:38 PM |
| Spilt excel file in unix | Soumya Dash | Shell Programming and Scripting | 1 | 09-25-2006 02:56 AM |
| Reading file names from a file and executing the relative file from shell script | anushilrai | Shell Programming and Scripting | 4 | 03-10-2006 05:25 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
||||
|
How to spilt a file
Hi ,
I have a file,abc.txt. like abc.txt ======= KOKRS EL01 RLDNR M2 RRCTY 1 Company Code 100 Fiscal Year 2007 Version PW3 Currency USD 1 2 3 4 1 2 3 4 BA Account number Profit Ctr MRA Jan-TC Feb-TC A 93010000 1530 152 1429793 A 93010000 9999 403 0 0 0 A 93010000 9999 404 -142 A 93010000 9999 411 0 0 0 A 93010000 9999 465 214538 214538 6114330 A 93010000 9999 487 0 -207918 A 93010000 471 502 0 0 0 A 93010000 9999 502 0 0 0 KOKRS EL01 RLDNR M2 RRCTY 1 Company Code 152 Fiscal Year 2007 Version PW3 Currency GBP 1 2 3 4 1 2 3 4 BA Account number Profit Ctr MRA Jan-TC Feb-TC A 93010000 1200 152 0 0 0 A 93010000 9999 152 -57885 -16511 -537549 KOKRS EL01 RLDNR M2 RRCTY 1 ....... .....500 lines like this I have to spilt this file into diffrent files according to the company code. ex : abc_COMCODE_100.txt =================== KOKRS EL01 RLDNR M2 RRCTY 1 Company Code 100 Fiscal Year 2007 Version PW3 Currency USD 1 2 3 4 1 2 3 4 BA Account number Profit Ctr MRA Jan-TC Feb-TC A 93010000 1530 152 1429793 A 93010000 9999 403 0 0 0 A 93010000 9999 404 -142 A 93010000 9999 411 0 0 0 A 93010000 9999 465 214538 214538 6114330 A 93010000 9999 487 0 -207918 A 93010000 471 502 0 0 0 A 93010000 9999 502 0 0 0 abc_COMCODE_152.txt =================== KOKRS EL01 RLDNR M2 RRCTY 1 Company Code 152 Fiscal Year 2007 Version PW3 Currency GBP 1 2 3 4 1 2 3 4 BA Account number Profit Ctr MRA Jan-TC Feb-TC A 93010000 1200 152 0 0 0 A 93010000 9999 152 -57885 -16511 -537549 Kindly suggest me how to spilt it through Unix shell program. Thanks in advance !! |
|
|||||
|
Hi.
Command csplit was designed for this: Code:
#!/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
Code:
% ./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
|
|
|||||
|
Another one:
Code:
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
With some Awk implementations (like XPG Awk on Solairs), you should be more explicit: Code:
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
P.S. vgersh99's prefix makes more sense, of course. Last edited by radoulov; 11-20-2007 at 06:38 PM.. Reason: ps |
|
|||||
|
Hi, vgersh99.
Quote:
I tried it on a FreeBSD 4.11 system, and it has only an anemic split with a pattern-match added on, but no csplit (nor does it exist on OS X). The GNU-long options can usually be replaced with single-dash options. It would take another process to extract the string to make the filename, but that's a good exercise for the OP ... cheers, drl |
|
||||
|
Hi Friends,
Thanks for your help . I am novice to Unix . I am working in ksh and csh . now can youuplease explain how to execute that. abc.txt is my file name. drl your solution looks to be okay . but I am not able to execute it. |
| Sponsored Links | ||
|
|