Incomplete replacement/substitution awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Incomplete replacement/substitution awk
# 1  
Old 04-29-2013
Incomplete replacement/substitution awk

Hi!

(I'm just a newbie in awk & bash scripts) I have a script which replaces one column from an input file with a specified one from the same file. The input and the desired output files are shown below.
Code:
~ cat input.file
 random text
 Fe  1.33 23.23 3.33
 C  21.03 23.23 3.33
 Cu  0.00  0.00 0.00
 random text
%block ChemicalSpeciesLabel
 1 26  Fe
 3  6  C
 6 29  Cu
%endblock ChemicalSpeciesLabel
 random text

~ cat output.file
 26  1.33 23.23 3.33
 6  21.03 23.23 3.33
 29  0.00  0.00 0.00

The problem is that my script for the moment produce an "incomplete" replacement (see the first column from the third line)
Code:
~ cat output.file
 26  1.33 23.23 3.33
 6  21.03 23.23 3.33
 6u  0.00  0.00 0.00

I found on internet some pieces of code which do this with awk and adapted it for my job.
Code:
 awk '{ printf("o%-2s\n",$1) }' input.file > input.file.1

 sed '/%block.*ChemicalSpeciesLabel/I,/endblock.*ChemicalSpeciesLabel/I!d;/ChemicalSpeciesLabel/Id' input.file |awk '{printf("o%-3s %7s\n", $3, $2)}' > rules

 for file in $(ls -1 input.file.1)
  do
    awk 'NR==FNR {a[$1]=$2;next} {for ( i in a) gsub(i,a[i])}1' rules $file >temp.file
  done

I've modified the first two awks in order to get a supplementary space character, so that the replacement done by awk, would run ok (replace "C " with 3 and "Cu" with 6), but for the moment I still get the incomplete replacement. I think the problem is on the third awk, but I really don't know how to rewrite it.

Thank you!
# 2  
Old 04-29-2013
Try this script...
Code:
awk '{
   if ($1 ~ "^[A-Z]([a-z])?") {
      f=$1
      $1=""
      x[f]=$0
   }
   if ($NF ~ "^[A-Z]([a-z])?$") {
      l=$NF
      $NF=""
      y[l]=$(NF-1)
   }
} END {for (i in x) print y[i], x[i]}' inputfile

# 3  
Old 04-29-2013
Making a completely different set of wild assumptions about what might be included in "random text", you could try this awk script:
Code:
awk ' 
#{printf("FNR=%d, NR=%d, t=%d, $0=%s\n", FNR, NR, t, $0)}
FNR==NR && /^%block/ {
        # Following lines contain translation table.
        t = 1
        next 
}     
FNR==NR && /^%endblock/ {
        # We have found the end of the translation table.
        t = 0
        next
}
t {     # Add entry to tranlsation table.
        tt[$3] = $2
        next
}
FNR!=NR && $1 in tt {
        # This is the second time through the file and we have found a line
        # with its 1st field set to a value in our translation table.
        # Translate the value and print the line.
        # Note that we use sub() here rather than $1 = tt[$1] to keep the
        # original spacing from the input lines.
        sub($1, tt[$1])
        print
}' input.file input.file > output.file

As always, if you're using a Solaris/SunOS system, use /usr/xpg4/bin/awk, /usr/xpg6/bin/awk, or nawk instead of awk.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Text replacement with awk or sed?

Hi guys, I worked for almost a half-day for the replacement of some text automatically with script. But no success. The problem is I have hundred of files, which need to be replaced with some new text. It's a painful work to work manually and it's so easy to do it wrong. For example, I... (2 Replies)
Discussion started by: liuzhencc
2 Replies

2. Shell Programming and Scripting

Embed cmd into sed replacement to have dynamic substitution

Hello, Is it possible to embed the command output to the replacement of sed? Say I need to replace all the blank lines with random strings: input: ACCTTCGTCTTCTGG GCTTGAGATGGTCCA GCAGGGCTAGTGACG GACGAGTCTCTTGAC ACCAAATCAAAGATCand output is: >26aa36d934d44f06d15b3aab4645a602 $(date |... (9 Replies)
Discussion started by: yifangt
9 Replies

3. Shell Programming and Scripting

awk's gsub variable in replacement

I been trying to figure out how to use element of array as a replacement pattern. This works as I expected: $ echo "one two three" | awk '{ gsub(/wo/,"_BEG_&_END_",$2); print }' one t_BEG_wo_END_ three $ echo "one two three" | awk '{ tmp="foo"; gsub(/wo/,"_BEG_" tmp "_END_",$2);... (5 Replies)
Discussion started by: mirni
5 Replies

4. Shell Programming and Scripting

Awk replacement problem

Hello everyone, I have a problem with awk replacement... I need to replace "|\n" for "\n" I tried thisawk '{ sub(/\|\\n/, "\\n"); print }' but it seems like it doesn't work properly. Can anyone help with that? (4 Replies)
Discussion started by: 1tempus1
4 Replies

5. Shell Programming and Scripting

awk replacement problem

hi i am using awk for first time so i am having issue is it the correct way of using Y here is variable which i fetch using grep from file awk -v X={$Y} { if ($0 ~ /X/ ) { sub (out.*/,"out1",$0) } print 0 }, filename > temp when i look into temp file i dont see any replacement... (9 Replies)
Discussion started by: xyzstar
9 Replies

6. Shell Programming and Scripting

Awk replacement

Hi all, I need help in replacing awk with sed for the below. 1 ) cat list | awk -F" |," '/MATH/ {sub(/]*/,"",$3); print $3}' Eg: file : list Sno Subno Name 1 SUB1 ENG 2 SUB2 MATH 2) Eg:result Total No of Students: 2 Sno ID Sub ------------------ 1 ... (3 Replies)
Discussion started by: priyam
3 Replies

7. UNIX for Dummies Questions & Answers

awk pattern replacement

Hi I'm a newbie in unix and I'm having trouble in creating a script. I want to search for a pattern '_good' and insert new lines that contains '_bad', '_med', '_fail' while also ensure that the line contains _good is removed here some of the data UPDATE SCHOOL SET GRADE =... (1 Reply)
Discussion started by: sexyTrojan
1 Replies

8. Shell Programming and Scripting

perl as awk replacement in a script.

Hey all, Im trying to write a script on windows, which Im not too familiar with. Im generally a bash scripting guy but am using perl for this case. My question is... I have this exact output: 2 Dir(s) 6,380,429,312 bytes free and I just need to get the number out... (4 Replies)
Discussion started by: trey85stang
4 Replies

9. Shell Programming and Scripting

AWK String replacement

I have an xml file with following tags <NewTag>value123</xyz> <NewTag>value321</abcd> I have to replace the values in between the tags with some value ( VAL1/VAL2) but the thing the ending tag can be any thing, for this i need a awk command currently i am using this but it... (5 Replies)
Discussion started by: subin_bala
5 Replies

10. Shell Programming and Scripting

Awk variable replacement

I have a function awkvarrep() { awk -F'|' '$1~/$1/{printf "%-10s %-30s %-15s %-30s %-15s\n", $2,$3,$4,$5,$6}' testfile } I'm calling it by this VARREP=XYZ awkvarrep $VARREP since i'm passing $VARREP to the awkvarrep() function I want to use this with $1 but it dosen't seem to be... (5 Replies)
Discussion started by: iAm4Free
5 Replies
Login or Register to Ask a Question