Search code examples
bashunixfieldtext-processingprepend

Prepending letter to field value


I have a file 0.txt containing the following value fields contents in parentheses:

(bread,milk,),
(rice,brand B,),
(pan,eggs,Brandc,),

I'm looking in OS and elsewhere for how to prepend the letter x to the beginning of each value between commas so that my output file becomes (using bash unix):

(xbread,xmilk,),
(xrice,xbrand B,),
(xpan,xeggs,xBrand C,),

the only thing I've really tried but not enough is:

awk '{gsub(/,/,",x");print}' 0.txt

for all purposes the prefix should not be applied to the last commas at the end of each line.


Solution

  • With awk

    awk 'BEGIN{FS=OFS=","}{$1="(x"substr($1,2);for(i=2;i<=NF-2;i++){$i="x"$i}}1'
    

    Explanation:

    # Before you start, set the input and output delimiter
    BEGIN{
       FS=OFS=","
    }
    
    # The first field is special, the x has to be inserted
    # after the opening (
    $1="(x"substr($1,2)
    
    
    # Prepend 'x' from field 2 until the previous to last field
    for(i=2;i<=NF-2;i++){
        $i="x"$i
    }
    
    # 1 is always true. awk will print in that case
    1