File manipulation place 0 before the number using sed


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers File manipulation place 0 before the number using sed
# 1  
Old 10-10-2019
File manipulation place 0 before the number using sed

I'm new with sed, and i am really confused with slashes, backslashes, parentheses, I've tried reading some beginner's guide, but still trouble fixing this problem, do you have any tips where or what to read to learn more about sed? can you also help me with my problem?

Note: I was tasked to use sed on this.

Sample file:

Code:
upctm,pmdw_bip,pmdw_bip_mnt_35-FOLDistAutoRpt,Oct 7 2019 4:45 AM,Oct 7 2019 4:45 AM,1,1,Oct 6 2019 12:00 AM,Ended OK,3ppnc
upctm,pmdw_ddm,pmdw_ddm_dum_01-StartProjDCSDemand,Oct 17 2019 4:02 AM,Oct 17 2019 4:02 AM,3,1,Oct 16 2019 12:00 AM,Ended OK,3pqgq

I need to add 0 if the number in day is 1 only (ex. Oct 7 2019 to Oct 07 2019).

I've tried to sed, but the Oct 17 was changed to Oct 017
Code:
sed 's/Oct /Oct 0/g' sample_file.txt

Output:
upctm,pmdw_bip,pmdw_bip_mnt_35-FOLDistAutoRpt,Oct 07 2019 4:45 AM,Oct 07 2019 4:45 AM,1,1,Oct 06 2019 12:00 AM,Ended OK,3ppnc
upctm,pmdw_ddm,pmdw_ddm_dum_01-StartProjDCSDemand,Oct 017 2019 4:02 AM,Oct 017 2019 4:02 AM,3,1,Oct 016 2019 12:00 AM,Ended OK,3pqgq

Thank you in advance

Last edited by RavinderSingh13; 10-10-2019 at 05:27 AM..
# 2  
Old 10-10-2019
Hello akopocpoypoy,

Could you please try following.
Code:
awk '
{
  while(match($0,/Oct [0-9]+/)){
    val=sprintf("%s %02d",substr($0,RSTART,4),substr($0,RSTART+3,RLENGTH-3))
    sub(/Oct [0-9]+/,val)
  }
}
1
'  Input_file

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 3  
Old 10-10-2019
You must capture a digit that is followed by a space. Because all the matched part is substituted, you must put it back with \1 and \2 that refer to the 1st and 2nd \(capture group\).
Code:
sed 's/\(Oct\) \([1-9]\) /\1 0\2 /g' sample_file.txt

Because I put the Oct in a group, you can easily generalize it, to match all 3-letter month names: \([A-Z][a-z][a-z]\)
This User Gave Thanks to MadeInGermany For This Post:
# 4  
Old 10-10-2019
In case there are other occurrences of three letters followed by a space and a digit, you might want to narrow down the search pattern to the locale months:
Code:
sed -r "s/($(locale abmon | tr ';' '|')) ([[:digit:]] )/\1 0\2/g" file

Be aware that you need sed to recognize / handle EREs for this simple tr approach.
# 5  
Old 10-10-2019
Hello akopocpoypoy,

Or adding 1 more approach where no need to hard code string again and again, simply keep a string into a variable Oct in this case and need not to change anything in code.
Code:
awk -v var="Oct" '
{
  while(match($0,var" [0-9]+")){
    val=sprintf("%s %02d",substr($0,RSTART,4),substr($0,RSTART+3,RLENGTH-3))
    sub(var " [0-9]+",val)
  }
}
1
'   Input_file

Thanks,
R. Singh
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Zero padding a Number before and after a decimal place

Hi I was hoping someone could help me with a sed script I am trying to write? I am on a Mac running ElCapitan I have some text that I have converted from a pdf that I want to format into an xml file. In the file I have managed to delete all the text I do not need. The text I have left is... (8 Replies)
Discussion started by: Paul Walker
8 Replies

2. Shell Programming and Scripting

sed flat file manipulation

Hello, I have a large flat file where i need to change data in columns 131-133 based on what is in columns 172-173. I am not sure if I need to read the file line by line and make the change or if I can do this in a single statement. thank you (3 Replies)
Discussion started by: gblmin
3 Replies

3. Shell Programming and Scripting

Use GREP to count number of records and place it in a variable

I am trying to count the number of records from different files using grep, and then place the result in a separate variable for each file, so at the end of my shell script, I can sum all the variables and check if the number of records are equal to what I was expecting. It is weird butwc -ldoes... (2 Replies)
Discussion started by: dhruuv369
2 Replies

4. Shell Programming and Scripting

Help with number field manipulation

I have a comma separated file containing numbers, I would like to read the file and divide each number by 1024 and create an output file. Input file : 50312.00,3434.05, ,3433.34,124344.00,434343.00, , , Output file: 49.13,3.35,3.35,0,12.05,424.16,0,0 Please click this link: How to... (2 Replies)
Discussion started by: inditopgun
2 Replies

5. Shell Programming and Scripting

setter and getter functions for file manipulation with sed

Hi, I would really appreciate some help, I couldn't nail my problem: I would like to create some setter and getter functions to make my life easier. my sample file contains: keyword - some tabs - value - semicolon number 12.1; float .3; double 12; real 12.2324; stuff .234; decimal... (5 Replies)
Discussion started by: Toorop
5 Replies

6. Shell Programming and Scripting

SED/AWK file read & manipulation

I have large number of data files, close to 300 files, lets say all files are same kind and have extension .dat , each file have mulitple lines in it. There is a unique line in each file containing string 'SERVER'. Right after this line there is another line which contain a string 'DIGIT=0',... (4 Replies)
Discussion started by: sal_tx
4 Replies

7. Shell Programming and Scripting

File manipulation with AWK and SED

Hello How do i check that correct input files are used while using AWk and SED for file manipulation? e.g awk '/bin/ {print $0 }' shell.txt sed 's/hp/samsung/' printers.txt how do i ensure that the correct input files I am working with are used? (5 Replies)
Discussion started by: Pauline mugisha
5 Replies

8. Shell Programming and Scripting

Read a number from file and place it back

Hi All, I want to read one number from the file. Only one number will be there in the file. then i have to increment the number in my script and put it back in the same file. Is it possible? Can anybody help me? Thanks, Vinay (6 Replies)
Discussion started by: vinayakatj56
6 Replies

9. Shell Programming and Scripting

Place number with awk

Hello, if I've a list of number 23 34 56 78 how I can place a sequence of ordinated number in a boundary column so 1 23 2 34 3 56 4 78 Thanks in advance! (3 Replies)
Discussion started by: cv313x
3 Replies

10. Shell Programming and Scripting

file name Manipulation using sed

Hi, I have a file name, for which I want to strip out the first bit and leave the rest... So I want to take the file name .lockfile-filename.10001 ,strip it and have only filename.10001 ... Thanking you all inadvance, Zak (6 Replies)
Discussion started by: Zak
6 Replies
Login or Register to Ask a Question