Visit Our UNIX and Linux User Community


Check for length which exceeds specified length in a line


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Check for length which exceeds specified length in a line
# 1  
Old 11-21-2012
Check for length which exceeds specified length in a line

Hi,

I have a issue, I need to loop through a comma delimited file and check for the length which exceeds specified length , if Yes truncate the string.
But my problem is , I do not have to check for all the fields and the field lenght is not same for all the fields.

For ex:

Say my line
ahjdh,dfhkajhdf,adhklf,eiour

say I need to check length only for 2nd and 4th and max length for 2nd is 6 and max length for 4th field is 4.

Can somebody please help me.
I was trying with AWK , but couldn't move forward with it , please let me know if my logic is correct.

Code:
awk 'BEGIN{ FS = OFS = ","
l="13,2000,160,200,100,50,50,30,30,30,170"
split(l,len,",")
row=$1
split(f,field,",")
f="1,3,11"
split(c,col,",")
}
{
 for (i=1;i<=len,i++) {
  for (j in len) {
  if 
  if (length($(field[i])) = len[j] )

# 2  
Old 11-21-2012
Is this what you are trying to do?
Code:
awk -F, ' { if(length($2)>6) $2=substr($2,1,6); if(length($4)>4) $4=substr($4,1,4); print; } ' OFS=, filename

# 3  
Old 11-21-2012
Code:
awk -F, 'BEGIN {len="5,6,7,8";split(len,arr,",");}{for(i=1;i<=NF;i++){if(length($i)>arr[i])next}}1' input.csv

Code:
 
$ cat input.csv
this123,is,test,message
this,is,test,message
this,is,test,message
this,is,test,message123

Code:
 
$awk -F, 'BEGIN {len="5,6,7,8";split(len,arr,",");}{for(i=1;i<=NF;i++){if(length($i)>arr[i])next}}1' input.csv
this,is,test,message
this,is,test,message

5,6,7,8 is the length to check the 1,2,3,4 fileds

if you want to check only for some particular fields, then

Code:
 
$awk -F, 'BEGIN {len="5,0,0,8";split(len,arr,",");}{for(i=1;i<=NF;i++){if( arr[i]!=0 && length($i)>arr[i])next}}1'  input.csv
this,is,test,message
this,is,test,message

# 4  
Old 11-21-2012
If you are checking only for few specific columns then use.

Code:
$ cat file
this123,is,test,mess
this,issdfd,test,mess
this,isdfsdsd,test,mes
this,isdsdddsd,test,message123

$ awk -F, 'length($2) <= 6 && length($4) <= 4' file
this123,is,test,mess
this,issdfd,test,mess

# 5  
Old 11-25-2012
Thank you guys , checking the length and print works , but I also need to print the field name along with it . But somehow I am not able to print the field.
Can you please tell if we can print the array value.

For exp in the above example

This is what I tried
Code:
  nawk -F, 'BEGIN {len="5,6,7,8";split(len,arr,",");col="col1,col2,col3,col4";split(col,arr1,",");}{for(i=1;i<=NF;i++){if(length($i)>arr[i]) $i=substr($i,1,arr[i]); print${arr1[i]} next}}1' input.txt

input.txt
------------
 checking,the, lengthof, string

output.txt
----------
check,the, lengtho, string,Field col1,col3 exceeds the length

# 6  
Old 11-25-2012
Try this; may need some polishing, esp. reg. the lenghts to be supplied in a variable:
Code:
$ cat file
checking,the, lengthof, string
$ awk -F, 'BEGIN {split("5,6,7,8", len, ",");  OFS=","}
           {for (i=1; i<=NF; i++) if(length($i) > len[i]) {$i = substr($i, 1, len[i]); col[i]++; OA=1}}
           {printf "%s", $0;
            if (OA) {printf ", Fields ";
                     for (i=1; i<=NF; i++) {if (col[i]) printf "col%d ", i; col[i]=0;}
                     printf "exceed the length."
                    }
            printf "\n"; OA=0
           }
          ' file
 check,the, length, string, Fields col1 col3 exceed the length.


Last edited by RudiC; 11-25-2012 at 07:16 PM..
# 7  
Old 11-26-2012
Thank you , this is how I want the result to be , but my column names are not exactly col1, col2 etc . Actually they are different.

Like

name, city, zipcode, state, country,eff_date, start_date, end_date.

I need to display the actual field name for ex: city, zipcode, start_date is null.

I am not able to read this in an array. can you please help me .

Previous Thread | Next Thread
Test Your Knowledge in Computers #72
Difficulty: Easy
The 'Unix philosophy' is a computer design philosophy based on creating small, modular utilities that do one thing and do them well.
True or False?

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Convert variable length record to fixed length

Hi Team, I have an issue to split the file which is having special chracter(German Char) using awk command. I have a different length records in a file. I am separating the files based on the length using awk command. The command is working fine if the record is not having any... (7 Replies)
Discussion started by: Anthuvan
7 Replies

2. Shell Programming and Scripting

Array Length Reports as Having Length when it is Empty?

Hello All, I have this script that does stuff like "starting, stopping & restarting" a Daemon Process running on my machine... My main question is why in part of my code (which you will see below) does the Array Length (i.e. ${#PIDS} ) return "1" when I know the Array is empty..? Here is... (17 Replies)
Discussion started by: mrm5102
17 Replies

3. Shell Programming and Scripting

Flat file-make field length equal to header length

Hello Everyone, I am stuck with one issue while working on abstract flat file which i have to use as input and load data to table. Input Data- ------ ------------------------ ---- ----------------- WFI001 Xxxxxx Control Work Item A Number of Records ------ ------------------------... (5 Replies)
Discussion started by: sonali.s.more
5 Replies

4. Shell Programming and Scripting

changing a variable length text to a fixed length

Hi, Can anyone help with a effective solution ? I need to change a variable length text field (between 1 - 18 characters) to a fixed length text of 18 characters with the unused portion, at the end, filled with spaces. The text field is actually field 10 of a .csv file however I could cut... (7 Replies)
Discussion started by: dc18
7 Replies

5. Shell Programming and Scripting

Make variable length record a fixed length

Very, very new to unix scripting and have a unique situation. I have a file of records that contain 3 records types: (H)eader Records (D)etail Records (T)railer Records The Detail records are 82 bytes in length which is perfect. The Header and Trailer records sometimes are 82 bytes in... (3 Replies)
Discussion started by: jclanc8
3 Replies

6. Shell Programming and Scripting

include NULLs in line length check

Hello, I am checking the length of each line of a fixed length file and making sure all lines are 161 length. My problem is that some files contain null characters which gets stripped out of my echo. How do I have the NULLs included in my check? (and I cannot replace or sub the NULL values with... (10 Replies)
Discussion started by: ironmix
10 Replies

7. UNIX for Dummies Questions & Answers

What the command to find out the record length of a fixed length file?

I want to find out the record length of a fixed length file? I forgot the command. Any body know? (9 Replies)
Discussion started by: tranq01
9 Replies

8. UNIX for Dummies Questions & Answers

Sed working on lines of small length and not large length

Hi , I have a peculiar case, where my sed command is working on a file which contains lines of small length. sed "s/XYZ:1/XYZ:3/g" abc.txt > xyz.txt when abc.txt contains lines of small length(currently around 80 chars) , this sed command is working fine. when abc.txt contains lines of... (3 Replies)
Discussion started by: thanuman
3 Replies

9. Shell Programming and Scripting

creating a fixed length output from a variable length input

Is there a command that sets a variable length? I have a input of a variable length field but my output for that field needs to be set to 32 char. Is there such a command? I am on a sun box running ksh Thanks (2 Replies)
Discussion started by: r1500
2 Replies

Featured Tech Videos