Cut output to same byte position


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Cut output to same byte position
# 1  
Old 11-21-2006
Cut output to same byte position

Hi folks

I have a file with thousands of lines with fixed length fields:

sample (assume x is a blank space)

111333xx444TTTLKOPxxxxxxxxx

I need to make a copy of this file but with only some of the field positions, for example I'd like to copy the sample to the follwing: so I'd like to print bytes 4-5 and 15-16 and they be in the same character positions in the new file.

xxx33xxxxxxxxTLxxxxxxxxxxxxxxx

I started looking at cut -b4-5,15-16 but my output is in position 1-4 instead of the same 4-5 and 15-16 with blank spaces everywhere there was one in the original.

Any help would be appreciated.
# 2  
Old 11-21-2006
try with awk. Use the substr($0,Starting_Position,Length) function to cut specific byte from the file.

e.g.
111333xx444TTTLKOPxxxxxxxxx


awk '
{
filler1=substr($0,0,3)
fild1=substr($0,4,2)
filler2=substr($0,6,8)
fild2=substr($0,15,2)
filler3=substr($0,17,11)
printf("%s%s%s%s%s",filler1,fild1,filler2,fild2,filler3)
}' file1 > out_file

Note: Adjuct the filed position as per your correct file layout.


--Manish Jha
# 3  
Old 11-22-2006
Hi Manish

This does print the correct positions but does not fill in the spaces between with the same number of bytes turned to blanks that were in the original. For example, if we take the following 2 lines.

ABC123DEF
GEH456JKL
Say I want to print position 1-2 and 6-8 and want everything in between turned to blank spaces so the byte positions from my input are in the same positions as my output.

Say x is a blank space the output should look like:
ABxxx3DEx
GExxx6JKx

The suggested awk with substr gives me the right substrings but in the wrong position in the new file:
AB3DE
GE6JK

Thanks for any suggestions
# 4  
Old 11-22-2006
Code:
echo "ABC123DEF" | sed "s/\(.\{2\}\)\(.\{3\}\)\(.\{3\}\).*/\1   \3 /"

sed "s/\(.\{2\}\)\(.\{3\}\)\(.\{3\}\).*/\1 \3 /"

Match the first two char

sed "s/\(.\{2\}\)\(.\{3\}\)\(.\{3\}\).*/\1 \3 /"

Match next three char

sed "s/\(.\{2\}\)\(.\{3\}\)\(.\{3\}\).*/\1 \3 /"

Match next three char followed by the above three char

.* match till end of the line

I added three blanks between \1 and \3 and one blank after \3 to replace the respective char in input with blanks
# 5  
Old 11-22-2006
Is this ok ?

Code:
awk ' { printf "%sxxx%sx\n", substr($0, 1, 2),  substr($0, 6, 3) }'  filename


ABxxx3DEx
GExxx6JKx
# 6  
Old 11-22-2006
Thanks everyone.

my samples are simplified so what I actually have are lines 300 bytes long.

I need to print bytes 1-3, 203-240, and 260-289, with blank spaces between so the output remains in the same position. This presents a problem with sed because putting 200 spaces in the replace segment doesn't make sense. The suggestions above are fine for my samples which are 10-12 bytes long but not for 300 byte long lines where are only need to print a few bytes across the line.

Interesting issue I have here I never thought would be so tricky to figure out when I started Smilie

Thanks for all suggestions
# 7  
Old 11-22-2006
If you have Python, an alternative
Sample input:
-------------------
111333 444TTTLKOP
122333 444DDDLKOP
422333 4445DDLTlR


Code:
#!/usr/bin/python
start1,end1 = 3,6 #position 4-6
start2,end2 = 14,17 #position 15-17
for lines in open("test.txt"):
        lines = list(lines.strip())
        lines[start1:end1] = " " * (end1 - start1) #sub space at positoin 4-5
        lines[start2:end2] = " " * (end2 - start2)
        print ''.join(lines)

output:
Code:
111     444TTT   P
122     444DDD   P
422     4445DD   R

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Cut command with dynamic passing of delimiter and position values

Hi All, We have a requirement of picking nth position value by using cut command. value would be delimited by any symbols. We have to pass delimited value and postition to get the value in a string. ex. echo "A,B,C,D,E" |cut -d "," -f3 echo "A|B|C|D|E"|cut -d "|" -f2 Kindly frame the... (5 Replies)
Discussion started by: KK230689
5 Replies

2. UNIX for Beginners Questions & Answers

Print byte position of extended ascii character

Hello, I am on AIX. When I encounter extended ascii characters and special characters on a file I need to print.. Byte position, actual character and line number. Is there a simple command that can give me the above result ? Thanks in advance (38 Replies)
Discussion started by: rosebud123
38 Replies

3. UNIX for Beginners Questions & Answers

Cut two individual position and summ

Hi All, I am having a huge file file. I need to cut the below column and do the below calculation I did the below command and able to do on full databased no on the individual based any help on doing each row by row cut -c 52-56 myfile | awk '{total = total + $1}END{print total}'... (7 Replies)
Discussion started by: arunkumar_mca
7 Replies

4. Shell Programming and Scripting

How to cut line from certain position?

Hi Gurus, I want to cut my file from 27th charactor to the end of line. can anybody give some unix command to do this. Thanks in advance (3 Replies)
Discussion started by: ken6503
3 Replies

5. Shell Programming and Scripting

Cut multiple data based on character position

How to extract multiple data based on character position. I need to fetch from 7-9 and 22-26 and there is no delimiter for 22-26 since it is part of the column. The file may have more than 1000 character long.I managed to pull any one but not both for example test data 12345 zxc vbnmlk... (1 Reply)
Discussion started by: zooby
1 Replies

6. Shell Programming and Scripting

Perl- Output file is always 0 byte

Hi all, I am new to perl programming. However i have a script that connects to the database and spools that into an output file. Strange thing is that sometimes this script works and sometimes the ouput spool file is always 0 byte. I have verified the sql query and the query always returns... (5 Replies)
Discussion started by: amit1_x
5 Replies

7. Shell Programming and Scripting

Remove a byte(Last byte from the last line)

Hi All Can anyone please suggest me how to remove the last byte from a falt file .This is from the last line's last BYTE. Please suggest me something. Thank's and regards Vinay (1 Reply)
Discussion started by: vinayrao
1 Replies

8. Shell Programming and Scripting

Check if 2 files are identical byte-to-byte?

In my server migration requirement, I need to compare if one file on old server is exactly the same as the corresponding file on the new server. For diff and comm, the inputs need to be sorted. But I do not want to disturb the content of the file and need to find byte-to-byte match. Please... (4 Replies)
Discussion started by: krishmaths
4 Replies

9. Shell Programming and Scripting

Cut position as a variable

Hi All, I wish to cut an input by using the below command but i would want to have the cut position as a variable. For eg, the position number is 11 now and i wish that this number is being assigned to a variable before putting into the cut function. Can this be done ? Can any expert help?... (1 Reply)
Discussion started by: Raynon
1 Replies

10. Shell Programming and Scripting

byte count and cut command

1. Is there a way to count the number of bytes of a variable? example: abc@yahoo.com is 13 bytes 2. Cut command only allows one byte for delimiter example: cut -f1 -d'.' delimited by period. Is there a way to have two or more characters in the delimiter field? thanks in adavance. :) (4 Replies)
Discussion started by: hemangjani
4 Replies
Login or Register to Ask a Question