Views How to replace a CRLF char from a variable length file in the middle of a string in UNIX?


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Views How to replace a CRLF char from a variable length file in the middle of a string in UNIX?
# 1  
Old 08-17-2018
Views How to replace a CRLF char from a variable length file in the middle of a string in UNIX?

My sample file is variable length, with out any field delimiters. It has min of 18 chars length and the 'CRLF' is potentially between 12-14 chars. How do I replace this with a space? I still want to keep end of record, but just want to remove these new lines chars in the middle of the data.

Code:
sample data: in this data record type statrting with '1234' continued on nextline due to a newline char in the middle of the record.
1123xxsdfdsfsfdsfds
1234ddfxxy
fffrrr
1123dfdffdfdxxxxxxxxx
1234ydfyyy
zmkn

------ Post updated at 02:42 PM ------

the output I want is :
Code:
1123xxsdfdsfsfdsfds
1234ddfxxyfffrrr
1123dfdffdfdxxxxxxxxx
1234ydfyyyzmkn

Thank you!
# 2  
Old 08-17-2018
Hi chandrath...
Welcome to these froums.

Which OS are you using.
Which shell have you got,
Any preferred tools,
And finally your coding attempts at solving your problem...
# 3  
Old 08-17-2018
On top of what wisecracker already said, a few additional questions:

Didn't you say you want a space introduced between the partial lines? Your sample output doesn't have such.
And, your "completed" lines (2 and 4) don't have the required minimum length of 18 chars.
Is it always one single line to be added to an incomplete one, or can there be more?
# 4  
Old 08-17-2018
Try putting the following code into a command file for sed:
Code:
/^1234/ {
         N
         s/\n/ /
        }

How to use it:
Code:
sed -f commandFile inputFile > outputFile

Once a line starting with "1234" is read, the next line is appended into sed, separated by a new_line. Then that new_line is replaced with a space.

HTH

P.S. It was noted you wanted a space when you wanted to take out the CRLF but this was missing in your example output. If you don't want a space, take out the space after the second slash in the s command.

Last edited by wbport; 08-17-2018 at 06:34 PM..
# 5  
Old 08-20-2018
@wbport, thank you!The 1234 record may not have a new line chars too.. The updated sample input file:
Code:
1123xxsdfdsfsfdsfds
1234ddfxxy
fffrrr
1123dfdffdfdxxxxxxxxx
1234ydfyyy
zmkn
1234asdafxxfrrrfrrr
1123werwetrretttrretertre

output file:
Code:
1123xxsdfdsfsfdsfds
1234ddfxxyfffrrr
1123dfdffdfdxxxxxxxxx
1234ydfyyyzmkn
1234asdafxxfrrrfrrr
1123werwetrretttrretertre

------ Post updated at 10:01 PM ------

Thank you for all inputs. Sorry for the confusion about the problem example. Here I am reposting the problem.

My sample file is variable length, with out any field delimiters. It has min of 18 chars length and the 'CRLF' is potentially (not always) between 11-15 chars.
How do I replace this type of new line char with a space? I still want to keep end of record, but just want to replace these new lines chars in the middle of the data with a space.
In below example record # 2, #4 (for a record type of begining '1234') has a 'CRLF' char in b/w 11-15 char of record which I want to replace with space.
my OS: Unix AIX 7.2
updated Input:
Code:
1123xxsdfdsfsfdsfdssa
1234ddfxxyff
frrrdds
1123dfdffdfdxxxxxxxxxas
1234ydfyyyzm
knsaaass
1234asdafxxfrrrfrrrsaa
1123werwetrretttrretertre

Expected output:
Code:
1123xxsdfdsfsfdsfdssa
1234ddfxxyfff rrrdds
1123dfdffdfdxxxxxxxxxas
1234ydfyyyzm knsaaass
1234asdafxxfrrrfrrrsaa
1123werwetrretttrretertre

What I tried:
Code:
sed '/^.\{15\}$/!N;s/./ /11' filename

But it's just adding space @ col 11, not removing CRLF b/w cols 11-15.

Thank you!
# 6  
Old 08-20-2018
I do not see any CR (0x0D, \r) just LF (0x0A, \n)

Code:
 od -c example.file
0000000   1   1   2   3   x   x   s   d   f   d   s   f   s   f   d   s
0000020   f   d   s   s   a  \n   1   2   3   4   d   d   f   x   x   y
0000040   f   f  \n   f   r   r   r   d   d   s  \n   1   1   2   3   d
0000060   f   d   f   f   d   f   d   x   x   x   x   x   x   x   x   x
0000100   a   s  \n   1   2   3   4   y   d   f   y   y   y   z   m  \n
0000120   k   n   s   a   a   a   s   s  \n   1   2   3   4   a   s   d
0000140   a   f   x   x   f   r   r   r   f   r   r   r   s   a   a  \n
0000160   1   1   2   3   w   e   r   w   e   t   r   r   e   t   t   t
0000200   r   r   e   t   e   r   t   r   e  \n
0000212

In case this is useful.

Code:
perl -pe 'if((length) < 18 && not $seen) {s/\n/ /; ++$seen} else { undef $seen }' example.file

1123xxsdfdsfsfdsfdssa
1234ddfxxyff frrrdds
1123dfdffdfdxxxxxxxxxas
1234ydfyyyzm knsaaass
1234asdafxxfrrrfrrrsaa
1123werwetrretttrretertre

# 7  
Old 08-20-2018
I see if your 1234 line is followed by a 1123 line you don't want to combine lines. For the following I assume your data will never have a tilde character "~". If it does substitute some other "never happen" character or stream of characters in the sed command file.

Here I change the newline to a tilde. If the characters after that are 1123, change the tilde back to a newline. If not, delete the tilde and the line following 1234 will remain appended.

HTH
Code:
/^1234/ {
         N
         s/\n/~/
         s/~1123/\n1123/
         s/~//
        }

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

How to read variable length file on UNIX generated by Mainframe?

Hi All, We have variable block file generated on Mainframe. We have to process the file on unix. So we FTPed the file on binary (as it has packed decimal fields). but i don't know how to read the file on unix. As you know variable block file will have a data like record length followed by... (2 Replies)
Discussion started by: SundarGampa
2 Replies

2. UNIX for Dummies Questions & Answers

print variable length text from the middle of a line?

I am trying to get text from a webpage, in terminal form. So far I am: 1. getting the html for the page printed using curl (curl -s webpage.com), which is then 2. piped to awk, printing line number 29 (awk NR==29), then 3. this is where I am sort of lost. I know where in the printed line I... (7 Replies)
Discussion started by: darkfalz
7 Replies

3. Shell Programming and Scripting

replace (sed?) a string in file with multiple lines (string) from variable

Can someone tell me how I can do this? e.g: a=$(echo -e wert trewt ertert ertert ertert erttert erterte rterter tertertert ert) How do i replace the STRING with $a? I try this: sed -i 's/STRING/'"$a"'/g' filename.ext but this don' t work (2 Replies)
Discussion started by: jforce
2 Replies

4. Programming

How to find length of string and pass into char array in C?

Hi All I want to take a Hexadecimal number as input and i want to find lenth of the input and pass it to char s ( char s ). I have a program to convert hexadecial to binary but it is taking limited input but i want to return binary number based on input. How? (1 Reply)
Discussion started by: atharalikhan
1 Replies

5. Shell Programming and Scripting

Using sed to replace a string in file with a string in a variable that contains spaces

Hi, i call my shell like: my_shell "my project name" my script: #!/bin/bash -vx projectname=$1 sed s/'PROJECT_NAME ='/'PROJECT_NAME = '$projectname/ <test_config_doxy >temp cp temp test_config_doxy the following error occurres: sed s/'PROJECT_NAME ... (2 Replies)
Discussion started by: vivelafete
2 Replies

6. Shell Programming and Scripting

Replacing one Char in a string of variable length

Hi all, I am trying to find the best way of making a change to 1 char in a string, the string can be between 1 and 14 characters. I am reading a line in from a file which contains 012341231231:2:102939283:NNN: Require :NBN: 012838238232:3:372932:NNN: Require :NNB: I need to change 1 N or a... (8 Replies)
Discussion started by: nkwilliams
8 Replies

7. Shell Programming and Scripting

awk - replace number of string length from search and replace for a serialized array

Hello, I really would appreciate some help with a bash script for some string manipulation on an SQL dump: I'd like to be able to rename "sites/WHATEVER/files" to "sites/SOMETHINGELSE/files" within the sql dump. This is quite easy with sed: sed -e... (1 Reply)
Discussion started by: otrotipo
1 Replies

8. Shell Programming and Scripting

Replace variable length numeric string

I have a customer who logged some cc and bank account numbers in their apache logs. I got the cc numbers x'd out with sed -e 's/args=\{16\}/args=XXXXXXXXXXXXXXXX/g' -e 's/cardnum=\{16\}/cardnum=XXXXXXXXXXXXXXXX/g'but that wasn't too difficult due to the value being 16 digits. The bank account... (7 Replies)
Discussion started by: mk4mzid
7 Replies

9. UNIX for Dummies Questions & Answers

Convert a tab delimited/variable length file to fixed length file

Hi, all. I need to convert a file tab delimited/variable length file in AIX to a fixed lenght file delimited by spaces. This is the input file: 10200002<tab>US$ COM<tab>16/12/2008<tab>2,3775<tab>2,3783 19300978<tab>EURO<tab>16/12/2008<tab>3,28523<tab>3,28657 And this is the expected... (2 Replies)
Discussion started by: Everton_Silveir
2 Replies

10. UNIX for Dummies Questions & Answers

string of 7 char length always...

Hi, I know, particular value in the variable should always be of lenth 7 , but the value that is present in thevariable might be of any no.of characters less than or equal to 7... if the no.of characters in the variable is less than 7, I want to add, zeroes at the starting of the field.. How can... (3 Replies)
Discussion started by: thanuman
3 Replies
Login or Register to Ask a Question