How to repeat a character in a field if it's a single character?


Login or Register to Reply

 
Thread Tools Search this Thread
# 1  
How to repeat a character in a field if it's a single character?

I have a csv dataset like this :
Code:
C,rs18768
G,rs13785
GA,rs1065
G,rs1801279
T,rs9274407
A,rs730012

I'm thinking of use like awk, sed to covert the dataset to this format: (if it's two character, then keep the same)
Code:
CC,rs18768
GG,rs13785
GA,rs1065
GG,rs1801279
TT,rs9274407
AA,rs730012

Could anyone give me some clues ?

Last edited by RavinderSingh13; 4 Weeks Ago at 01:11 AM..
# 2  
Hello nengcheng,

It is always recommended to add your efforts in your post which you have out in order to solve your own problem, could you please try following.

Code:
awk 'BEGIN{FS=OFS=","} length($1)==1{sub(/.*/,"&&",$1)} 1 '  Input_file

Output will be as follows.
Code:
CC,rs18768
GG,rs13785
GA,rs1065
GG,rs1801279
TT,rs9274407
AA,rs730012


2nd solution: Using $1 value itself to make it double.
Code:
awk 'BEGIN{FS=OFS=","} length($1)==1{$1=$1$1} 1'   Input_file

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 4  
Quote:
Originally Posted by nezabudka
Code:
sed 's/^\(.\),/\1&/'

Cool solution nez, how about a pure BASH one, just for fun Smilie

Code:
while IFS=, read field1 field2
do
  if [[ ${#field1} -eq 1 ]]
  then
      field1=${field1}${field1}
  fi
  echo "$field1,$field2"
done < "Input_file"

Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 5  
Code:
#!/bin/bash
while read -n2 a; do
        read b
        echo ${a//,/$a}$b
done < file

--- Post updated at 10:37 ---

Code:
#!/bin/bash
while read a; do
        echo ${a/#?,/${a%,*}${a%,*},}
done < file


Last edited by nezabudka; 4 Weeks Ago at 04:00 AM..
This User Gave Thanks to nezabudka For This Post:
# 6  
Thank you Singh, I will try it next time.

--- Post updated at 03:55 AM ---

Thank you, nezabudka it also worked for me.
# 7  
Hi Ravinder...

Just by removing one set of [] makes your version fully POSIX compliant:
Code:
#!/usr/local/bin/dash

echo 'C,rs18768
G,rs13785
GA,rs1065
G,rs1801279
T,rs9274407
A,rs730012' > /tmp/text

while IFS=, read field1 field2
do
    if [ ${#field1} -eq 1 ]
     then
        field1=${field1}${field1}
    fi
    echo "$field1,$field2"
 done < /tmp/text

Results, OSX 10.14.3, default bash terminal, calling dash:
Code:
Last login: Sun Apr 28 11:31:12 on ttys000
AMIGA:amiga~> cd desktop/Code/Shell
AMIGA:amiga~/desktop/Code/Shell> ./add_single_char.sh
CC,rs18768
GG,rs13785
GA,rs1065
GG,rs1801279
TT,rs9274407
AA,rs730012
AMIGA:amiga~/desktop/Code/Shell> _

This User Gave Thanks to wisecracker For This Post:
Login or Register to Reply

|
Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
awk sed to repeat every character on same position from the upper line replacing whitespace
nakaedu
Hello is it possible with awk or sed to replace any white space with the previous line characters in the same position? I am asking this because the file I have doesn't always follow a pattern. For example the file I have is the result of a command to obtain windows ACLs: icacls C:\ /t...... Shell Programming and Scripting
5
Shell Programming and Scripting
Replace a field with a character as per the field length
gani_85
Hi all, I have a requirement to replace a field with a character as per the length of the field. Suppose i have a file where second field is of 20 character length. I want to replace second field with 20 stars (*). like ******************** As the field is not a fixed one, i want to do the...... Shell Programming and Scripting
2
Shell Programming and Scripting
Replace multiple occurances of same character with a single character.
dipanchandra
Hi all, Greetings, I have the following scenario, The contents of main file are like : Unix|||||forum|||||||||||||||is||||||the||best so||||||be|||||on||||||||||||||||||||||||||||||||||||||||||||it And i need the output in the following form: Unix=forum=is=the=best so=be=on=it ...... Shell Programming and Scripting
3
Shell Programming and Scripting
Count number of occurences of a character in a field defined by the character in another field
s052866
Hello, I have a text file with n lines in the following format (9 column fields): Example: contig00012 149606 G C 49 68 60 18 c$cccccacccccccccc^c I need to count the number of lower-case and upper-case occurences in column 9, respectively, of the...... Shell Programming and Scripting
3
Shell Programming and Scripting
repeat character with printf
ripat
It's all in the subject. I try to figure out how to repeat a character a number of time with printf. For example to draw a line in a script output. Thks... Shell Programming and Scripting
13
Shell Programming and Scripting