Visit Our UNIX and Linux User Community


Need specific byte positions of a file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Need specific byte positions of a file
# 1  
Old 10-13-2009
Need specific byte positions of a file

Hello ,

I need to extract data from specific byte positions of a file.
I have tried the below command

awk ' { printf "%s", substr($0, 642363,642369}' filename

to extract data between byte positions
642363 and 642369 .

However I did not get the expected result.
I am new to awk and sed , please help to achieve the results that I want.
I am not sure if there any Unix command that would extract these details.
# 2  
Old 10-13-2009
Code:
while(<>)  {
    $txt .= $_;
    last if ( scalar split //, $txt ) >= ( 642369 );
}

$txt =~ s/(.{642363})(.{6})/\2/s;

print $txt;

Might be process intensive ?! Not tested, but expected to work.
# 3  
Old 10-13-2009
Well , I am new to sed and awk
please let me know how I run this script ?
# 4  
Old 10-13-2009
Yep, sorry for not mentioning it. It is actually a perl script.

1. Store this in a file, (any name), script1.pl

Code:
$ cat script1.pl
while(<>)  {
    $txt .= $_;
    last if ( scalar split //, $txt ) >= ( 642369 );
}

$txt =~ s/(.{642363})(.{6})/\2/s;

print $txt;

2. Execute it as,

Code:
$ perl script1.pl input-file

It will extract the particular data, and prints it.
# 5  
Old 10-13-2009
Please can you make the byte positions as also variables
which can be passed along with file name.

Coz I need to do it several times over many files.

Thanks in advance.

---------- Post updated at 03:08 PM ---------- Previous update was at 02:56 PM ----------

Hello ,

I ran the below code :

Code:
 
#!/usr/bin/perl
while(<>)  {
    $txt .= $_;
    last if ( scalar split //, $txt ) >= ( 72551  );
}
$txt =~ s/(.{72545})(.{6})/\2/s;
print $txt;

and got the below message when I ran it like
perl byte_pos_script.pl file_name
Code:
Quantifier in {,} bigger than 32766 before HERE mark in regex m/(.{ << HERE 72545})(.{6})/

Please help.
# 6  
Old 10-13-2009
Another way using dd :
Code:
dd if=filename bs=1 skip=642362 count=8

An example with the following input file (which contains a single record)
Code:
[001][002][003][004][005][006][007][008][009][010][011][012][013][014][015][016]
[017][018][019][020][021][022][023][024][025][026][027][028][029][030][031][032]
[033][034][035][036][037][038][039][040][041][042][043][044][045][046][047][048]
[049][050][051][052][053][054][055][056][057][058][059][060][061][062][063][064]
[065][066][067][068][069][070][071][072][073][074][075][076][077][078][079][080]
[081][082][083][084][085][086][087][088][089][090][091][092][093][094][095][096]
[097][098][099][100][101][102][103][104][105][106][107][108][109][110][111][112]
[113][114][115][116][117][118][119][120][121][122][123][124][125][126][127][128]
[129][130][131][132][133][134][135][136][137][138][139][140][141][142][143][144]
[145][146][147][148][149][150][151][152][153][154][155][156][157][158][159][160]
[161][162][163][164][165][166][167][168][169][170][171][172][173][174][175][176]
[177][178][179][180][181][182][183][184][185][186][187][188][189][190][191][192]
[193][194][195][196][197][198][199]

To extract bytes from 501 to 510 :
Code:
> dd if=inputfile bs=1 skip=500 count=10 2>/dev/null
[101][102]>

As you can see there is no line terminator in the output.

Jean-Pierre.
# 7  
Old 10-13-2009
Bad luck, that is your platforms max quantifier thing as said here perlre - perldoc.perl.org

Does this helps for you:
Code:
$ tr '\n' ' ' < input-file | cut -c 72456-72551

  • translate new line to space
  • cut the required bits

Previous Thread | Next Thread
Test Your Knowledge in Computers #119
Difficulty: Easy
The Single UNIX Specification (SUS) is a standard for Unix systems to qualify and have permission to use the UNIX certification mark.
True or False?

9 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Replace specific positions in a file

I have a fixed-length positional file. I am trying to replace content of position 4-13 (length=10) with xxxxxxxxxx. Sample 2 rows in this file: H0187459823 172SMITH, JOE H0112345678 172DOE, JANE In this example 87459823 (from 1st line) and 12345678 (from 2nd line) (both in position... (3 Replies)
Discussion started by: Diver181
3 Replies

2. Shell Programming and Scripting

Search and replace specific positions of specific lines

Hi, I have a file with hundreds of lines. I want to search for particular lines starting with 4000, search and replace the 137-139 position characters; which will be '000', with '036'. Can all of this be done without opening a temp file and then moving that temp file to the original file name. ... (7 Replies)
Discussion started by: dsid
7 Replies

3. Shell Programming and Scripting

Char/byte positions of delimiters in file

I have a pipe delimited file and I'm trying to write a script that will give the character/byte positions of each pipe in the file. There may be some simple way but I don't know what it is... Can someone help with this? Ex: file has output below abc|def|ghi| I want the script to tell the... (1 Reply)
Discussion started by: basz808
1 Replies

4. Shell Programming and Scripting

Filter lines based on values at specific positions

hi. I have a Fixed Length text file as input where the character positions 4-5(two character positions starting from 4th position) indicates the LOB indicator. The file structure is something like below: 10126Apple DrinkOmaha 10231Milkshake New Jersey 103 Billabong Illinois ... (6 Replies)
Discussion started by: kumarjt
6 Replies

5. Shell Programming and Scripting

sed to replace specific positions on line with file contents

Hi, I am trying to use an awk command to replace specific character positions on a line beginning with 80 with contents of another file. The line beginning with 80 in file1 is as follows: I want to replace the 000000000178800 (positions 34 - 49) on this file with the contents of... (2 Replies)
Discussion started by: nwalsh88
2 Replies

6. Shell Programming and Scripting

Count specific characters at specific column positions

Hi all, I need help. I have an input text file (input.txt) like this: 21 GTGCAACACCGTCTTGAGAGG 50 21 GACCGAGACAGAATGAAAATC 73 21 CGGGTCTGTAGTAGCAAACGC 108 21 CGAAAAATGAACCCCTTTATC 220 21 CGTGATCCTGTTGAAGGGTCG 259 Now I need to count A/T/G/C numbers at each character location in column... (2 Replies)
Discussion started by: thienxho
2 Replies

7. Shell Programming and Scripting

output strings to specific positions in a file

Been searching for about 3 hours for similar functionality that I can get examples of how to output text from variables into certain locations in a file. I would like to incorporate this into a script. I have not been able to find a command example that does it all in one method. I find part of... (1 Reply)
Discussion started by: bennu_500
1 Replies

8. UNIX for Dummies Questions & Answers

Search flat file in specific byte

I am on AIX Unix. I want to read a flat file for a string in a certain byte. I want to find the value: 943034 in column 56; and write out just those records to another file. Also, could I get the line/record number of where it was found in the input file? Thank you, sboxtops (1 Reply)
Discussion started by: sboxtops
1 Replies

9. Shell Programming and Scripting

Read Write byte range/chunk of data from specific location in file

I am new to Unix so will really appreciate if someone can guide me on this. What I want to do is: Step1: Read binary file - pick first 2 bytes, convert from hex to decimal. Read the next 3 bytes as well. 2 bytes will specify the number of bytes 'n' that I want to read and write... (1 Reply)
Discussion started by: Kbenipel
1 Replies

Featured Tech Videos