Sponsored Content
Top Forums UNIX for Beginners Questions & Answers Split a file based on number sum at the second column and the third column. Post 303044726 by Chubler_XL on Monday 2nd of March 2020 02:51:56 PM
Old 03-02-2020
Sorry about my delay in gettng back think timezone differences are involved here. looks like we have some nice solutions coming together in this thread now.

This is the pseudo code I had in mind when I first read your requirements:
Code:
set startnum=0
set fileext = 1
loop:
    read line from input
    if column#3 - startnum > 2999 then
        startnum = column#2
        fileext = fileext + 1
    endif
    append line to filename("file" + fileext)
end loop

And the awk coded solution:
Code:
awk '
BEGIN { start=0 ; filenum=1 }
!start { start=$2 }
($3 - start) > 2999 {
   close("file" filenum)
   filenum++
   start=$2
}
{ print > "file" filenum }' infile

This is very similar to RudiC's proposal. The main difference being in the close statement. awk has a limited number of output buffers and using close will become necessary when dealing with a larger input files which can generate too many output files.

And in the spirit of this site this reduced solution could be derived from above:

Code:
awk '
!start || ($3 - start) > 2999 {
   close("file" filenum++)
   start=$2
}
{ print > "file" filenum }' infile


Last edited by Chubler_XL; 03-02-2020 at 04:09 PM..
This User Gave Thanks to Chubler_XL For This Post:
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

How do I sum one column based on another column?

Hi, I am new to this forum and new to awk. I have a file that contains 2 columns. Heres an example of what it looks like: 10 + 20 + 40 + 50 - 70 - So the file is tab-delimited. What I want to do is add 10 to column 1 whenever column 2 is + and substract 10 from column 1... (1 Reply)
Discussion started by: phil_heath
1 Replies

2. Shell Programming and Scripting

Split single file into multiple files based on the number in the column

Dear All, I would like to split a file of the following format into multiple files based on the number in the 6th column (numbers 1, 2, 3...): ATOM 1 N GLY A 1 -3.198 27.537 -5.958 1.00 0.00 N ATOM 2 CA GLY A 1 -2.199 28.399 -6.617 1.00 0.00 ... (3 Replies)
Discussion started by: tomasl
3 Replies

3. Shell Programming and Scripting

Split the file based on column

Hi, I have a file sample_1.txt (300k rows) which has data like below: * Also each record is around 64k bytes 11|1|abc|102553|125589|64k bytes of data 10|2|def|123452|123356|...... 13|2|geh|144351|121123|... 25|4|fgh|165250|118890|.. 14|1|abc|186149|116657|......... (6 Replies)
Discussion started by: sol_nov
6 Replies

4. Shell Programming and Scripting

Sum Of Column Based On Column Condition

I have a following inputfile MT,AP,CDM,TTML,MUM,GS,SUCC,3 MT,AP,CDM,TTSL,AP,GS,FAIL,9 MT,AP,CDM,RCom,MAH,GS,SUCC,3 MT,AP,CDM,RTL,HP,GS,SUCC,1 MT,AP,CDM,Uni,UPE,GS,SUCC,2 MT,AP,CDM,Uni,MUM,GS,SUCC,2 TTSL,AP,GS,MT,MAH,CDM,SUCC,20 TTML,AP,GS,MT,MAH,CDM,FAIL,10... (2 Replies)
Discussion started by: siramitsharma
2 Replies

5. Shell Programming and Scripting

awk to sum a column based on duplicate strings in another column and show split totals

Hi, I have a similar input format- A_1 2 B_0 4 A_1 1 B_2 5 A_4 1 and looking to print in this output format with headers. can you suggest in awk?awk because i am doing some pattern matching from parent file to print column 1 of my input using awk already.Thanks! letter number_of_letters... (5 Replies)
Discussion started by: prashob123
5 Replies

6. Shell Programming and Scripting

Sum column values based in common identifier in 1st column.

Hi, I have a table to be imported for R as matrix or data.frame but I first need to edit it because I've got several lines with the same identifier (1st column), so I want to sum the each column (2nd -nth) of each identifier (1st column) The input is for example, after sorted: K00001 1 1 4 3... (8 Replies)
Discussion started by: sargotrons
8 Replies

7. Shell Programming and Scripting

Split column data if the table has n number of column's

please write a shell script Table -------------------------- 1 2 3 a b c 3 4 5 c d e 7 8 9 f g h Output should be like this --------------- 1 2 3 3 4 5 7 8 9 a b c c d e f g h (1 Reply)
Discussion started by: Priti2277
1 Replies

8. Shell Programming and Scripting

Split column data if the table has n number of column's with some record

Split column data if the table has n number of column's with some record then how to split n number of colmn's line by line with records Table --------- Col1 col2 col3 col4 ....................col20 1 2 3 4 .................... 20 a b c d .................... v ... (11 Replies)
Discussion started by: Priti2277
11 Replies

9. Shell Programming and Scripting

Sum of a column as new column based on header in a script

Hello, I am trying to store sum of a column as a new column inside a file but have to find the column names dynamically I/p c1,c2,c3,c4,c5 10,20,30,40,50 20,30,40,50,60 If i want to find sum only column c1, c3 and output it as c6,c7 O/p c1,c2,c3,c4,c5,c6,c7 10,20,30,40,50,30,70... (6 Replies)
Discussion started by: mkathi
6 Replies

10. UNIX for Beginners Questions & Answers

Sum in file based column

Hi All, I have a file as below and want to sum based on the id in the first column Input 10264;ATE; 12 10265;SES;11 10266AUT;50 10264;ATE;10 10265;SES;13 10266AUT;89 10264;ATE;1 10265;SES;15 10266AUT;78 Output 10264;ATE; 23 10265;SES;39 10266AUT;139 (6 Replies)
Discussion started by: arunkumar_mca
6 Replies
map::slippy(n)							 Mapping utilities						    map::slippy(n)

__________________________________________________________________________________________________________________________________________________

NAME
map::slippy - Common code for slippy based map packages SYNOPSIS
package require Tcl 8.4 package require Tk 8.4 package require map::slippy ?0.2? ::map::slippy length level ::map::slippy tiles level ::map::slippy tile size ::map::slippy tile valid tile levels ?msgvar? ::map::slippy geo 2tile geo ::map::slippy geo 2point geo ::map::slippy tile 2geo tile ::map::slippy tile 2point tile ::map::slippy point 2geo point ::map::slippy point 2tile point _________________________________________________________________ DESCRIPTION
This package provides a number of methods doing things needed by all types of slippy-based map packages. API
::map::slippy length level This method returns the width/height of a slippy-based map at the specified zoom level, in pixels. This is, in essence, the result of expr { [tiles $level] * [tile size] } ::map::slippy tiles level This method returns the width/height of a slippy-based map at the specified zoom level, in tiles. ::map::slippy tile size This method returns the width/height of a tile in a slippy-based map, in pixels. ::map::slippy tile valid tile levels ?msgvar? This method checks whether tile described a valid tile in a slippy-based map containing that many zoom levels. The result is a bool- ean value, true if the tile is valid, and false otherwise. For the latter a message is left in the variable named by msgvar, should it be specified. A tile identifier as stored in tile is a list containing zoom level, tile row, and tile column, in this order. The command essen- tially checks this, i.e. the syntax, that the zoom level is between 0 and "levels-1", and that the row/col information is within the boundaries for the zoom level, i.e. 0 ... "[tiles $zoom]-1". ::map::slippy geo 2tile geo Converts a geographical location at a zoom level (geo, a list containing zoom level, latitude, and longitude, in this order) to a tile identifier (list containing zoom level, row, and column) at that level. ::map::slippy geo 2point geo Converts a geographical location at a zoom level (geo, a list containing zoom level, latitude, and longitude, in this order) to a pixel position (list containing zoom level, y, and x) at that level. ::map::slippy tile 2geo tile Converts a tile identifier at a zoom level (tile, list containing zoom level, row, and column) to a geographical location (list con- taining zoom level, latitude, and longitude, in this order) at that level. ::map::slippy tile 2point tile Converts a tile identifier at a zoom level (tile, a list containing zoom level, row, and column, in this order) to a pixel position (list containing zoom level, y, and x) at that level. ::map::slippy point 2geo point Converts a pixel position at a zoom level (point, list containing zoom level, y, and x) to a geographical location (list containing zoom level, latitude, and longitude, in this order) at that level. ::map::slippy point 2tile point Converts a pixel position at a zoom level (point, a list containing zoom level, y, and x, in this order) to a tile identifier (list containing zoom level, row, and column) at that level. REFERENCES
[1] http://wiki.openstreetmap.org/wiki/Main_Page KEYWORDS
geodesy, geography, latitute, location, longitude, map, slippy, zoom map 0.2 map::slippy(n)
All times are GMT -4. The time now is 12:36 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy