awk Help - Beginner


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers awk Help - Beginner
# 1  
Old 02-20-2013
awk Help - Beginner

Hi,

I think I need to use AWK - however I have no experience of it. Can someone help please?

I have a file like this but with many more records - it is fixed width
Code:
THIS15021X            799999 XX           00000099999 00008888888 XX 15022013
THISQ15021X      999999 XX           00000099999 00008888888 XX 15022013
BLAS15021X          9999999XX        00000199999 00008888888 XX 15022013

I want the file to look like this again it is fixed width
Code:
THIS15021X         0799999 XX          00000099999 00008888888 XX 15022013
THISQ15021X     0999999 XX          00000099999 00008888888 XX 15022013
BLAS15021X        9999999 XX          00000199999 00008888888 XX 15022013

I want to add a leading 0 to the 2nd coloumn if it contains the word this at the beginning

Last edited by zaxxon; 02-20-2013 at 08:38 AM..
# 2  
Old 02-20-2013
Code:
awk '/^THIS/{$2="0"$2}1' file

# 3  
Old 02-20-2013
In shell with built-in commands:
Code:
while read word1 word2 otherwords
do
  case $word1 in
  THIS*) word2="0$word2";;
  esac
  printf "%s %s %s\n" "$word1" "$word2" "$otherwords"
done < file > newfile

In shell by using awk:
Code:
awk '/^THIS/ {$2="0"$2} {print}' < file > newfile

Both solutions read from file and direct their output to newfile.

Last edited by MadeInGermany; 02-20-2013 at 08:23 AM.. Reason: fix
# 4  
Old 02-20-2013
Thanks, that is very close - however I have noticed a funny problem:

So this is the actual file:

Code:
THIS15021X  123455 X            00000038600 00009999999 XX 15022013
THIS15021X   123456 XX           00000004260 00009999999 XX 15022013
THIS15021X   123457 XX            00000002240 00009999999 XX 15022013
THIS15021X   123458 XX            00000000800 00009999999 XX 15022013
THIS15021X   123459 XX            00000023445 00009999999 XX 15022013
THIS15021X   123460 XX            00000006632 00009999999 XX 15022013
BLAS15021X  1123456 XX            00000178839 00009999999 XX 15022013

However after running the commans, specificall the first one (note I am using a space before the 0 to move it along to the right position - the problem occurs without this space as well):

Code:
 awk '/CHEQ/ {$2=" 0"$2;}1' < file.txt > tempfile.txt

I am receiving this, the "BLAS" record is now incorrect:

Code:
THIS15021X   0123455 XX            00000038600 00009999999 XX 15022013
THIS15021X   0123456 XX            00000004260 00009999999 XX 15022013
THIS15021X   0123457 XX            00000002240 00009999999 XX 15022013
THIS15021X   0123458 XX            00000000800 00009999999 XX 15022013
THIS15021X   0123459 XX            00000023445 00009999999 XX 15022013
THIS15021X   0123460 XX            00000006632 00009999999 XX 15022013
BLAS15021X   1123456 XX                               00000178839 00009999999 XX 15022013

Will I need to specify the order in it's entirety $1 $2 $3 or something?
# 5  
Old 02-20-2013
Quote:
Originally Posted by mcclunyboy
. . .
I want the file to look like this again it is fixed width
. . .
I think all the proposals up to now will lose the fixed width property which the requestor needed to keep, esp. if you just add a "0" in front of $2 the record size is gone.
Not sure, though, how to do it. Break it into lines with fmt, modify with awk or sed, remove <linefeed> with tr?
Were there single lines, this might work:
Code:
$ sed 's:\(^THIS[^ ]*  \) :\10:' file


Last edited by RudiC; 02-20-2013 at 09:33 AM..
# 6  
Old 02-20-2013
Can you talk me through that sed command - with a slight edit I "think" I get what I want:

Code:
> sed 's:\(^THIS[^ ]* \) :\00:' file

Specifically the 10, which I replaced to 00... - simply adds a space followed by a 0 to the location I require.

Last edited by mcclunyboy; 02-20-2013 at 10:36 AM..
# 7  
Old 02-20-2013
This is more close to your initial requirement:
if there is THIS at the beginning of the line, insert a 0 at the beginning of the 2nd column.
The only additional requirement: columns are separated by one or many space characters.
Code:
sed '/^THIS/ s/ \([^ ]\)/ 0\1/' file

 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Red Hat

Help me please i am beginner

i have windows 8 host on Dell Laptop vmware 9 redhat 7.2 iso downloaded through redhat official site after installation on vm it only boots into text dont show graphics Please guide:( (1 Reply)
Discussion started by: hananabbas
1 Replies

2. Shell Programming and Scripting

AWK for a beginner

I am going to learn AWK for Pattern search (extracting strings ) related activities. I think that is what AWK is used for anyway. What book/similair resource would you suggest for a beginner ? (4 Replies)
Discussion started by: omega3
4 Replies

3. Shell Programming and Scripting

""Help Me!""Beginner awk learning issue

Hi All, I have just now started learning awk from the source - Awk - A Tutorial and Introduction - by Bruce Barnett and the bad part is that I am stuck on the very first example for running the awk script. The script is as - #!/bin/sh # Linux users have to change $8 to $9 awk ' BEGIN ... (6 Replies)
Discussion started by: csrohit
6 Replies

4. Shell Programming and Scripting

Beginner looking for help

Hello, I am trying to write a script that reads names from a file called input, removes names if they have the same letter next to each other and prints the others. e.g. Colin & John would be printed Garry & Lynn would be removed My thinking is that I read in each name and... (3 Replies)
Discussion started by: colinireland
3 Replies

5. UNIX for Dummies Questions & Answers

Beginner - What Should I Do First?

Hi people.... I have just started to learn unix.I want to know which version of Unix to install plus how to install it.I need to practise and make myself aware of how unix works.My thread is from an educational point of view.Also please feel free to give your suggestions as I am... (3 Replies)
Discussion started by: amit.kanade1983
3 Replies

6. Shell Programming and Scripting

Beginner Help

I need to write a script to test a nsort c program. I have written 8 .txt files with different cases. Also 8 .txt files with expected outcome. The shell I have written always "test pass" for the first case but always "fail" for the rest... Here is a portion of my code (as I still don't know how to... (5 Replies)
Discussion started by: thibodeau
5 Replies

7. UNIX for Dummies Questions & Answers

Beginner Help

hi guys, i have a DEl xps laptop cor 2 duo 2.2 i have vista installed on it i want to install a dual Boot UNIX on it.. can some one guide me ...cause i m tottaly new to UNIX i want to install unix on that laptop along with Vista.... thx any help would be deeply appreciated (sorry if i... (5 Replies)
Discussion started by: Farhan082
5 Replies

8. UNIX for Dummies Questions & Answers

AWK help please - beginner

Hi, I'm in dire need of some help for AWK. I'm a college student and my statistics professor decided he'd teach AWK in the last two days of our class, even when it's not programming class and we don't even have computers in class to experiment. Anyway, I tried looking at AWK tutorials, but it... (4 Replies)
Discussion started by: COLLEGE
4 Replies

9. Programming

Beginner C

Anyone know where I can get started in C++ programming in unix? Any good free tutorials or websites to start at? I am okay in unix scripting but have never done c programming of any sort... What are the main advantages of using C++ ? (2 Replies)
Discussion started by: frustrated1
2 Replies

10. Shell Programming and Scripting

Please help. I am a beginner.

Alrigt, I need to write a shell script where it counts the number of folders and files and dispays "My home directory has 'x' files and 'y' directories." So, I was thinking of doing this. set x = `ls | wc` so, if I have 8 files and folders in my home directory, x is not 8. now, I was... (1 Reply)
Discussion started by: Lykathea Aflame
1 Replies
Login or Register to Ask a Question