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


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to repeat a character in a field if it's a single character?
# 1  
Old 04-28-2019
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; 04-28-2019 at 02:11 AM..
# 2  
Old 04-28-2019
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:
# 3  
Old 04-28-2019
Code:
sed 's/^\(.\),/\1&/'

These 2 Users Gave Thanks to nezabudka For This Post:
# 4  
Old 04-28-2019
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  
Old 04-28-2019
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; 04-28-2019 at 05:00 AM..
This User Gave Thanks to nezabudka For This Post:
# 6  
Old 04-28-2019
Thank you Singh, I will try it next time.

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

Thank you, nezabudka it also worked for me.
# 7  
Old 04-28-2019
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 Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk sed to repeat every character on same position from the upper line replacing whitespace

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... (5 Replies)
Discussion started by: nakaedu
5 Replies

2. Shell Programming and Scripting

Replace a field with a character as per the field length

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... (2 Replies)
Discussion started by: gani_85
2 Replies

3. UNIX for Dummies Questions & Answers

Backspace to delete a single character

Hi I normally use backspace to delete a single on my local machine in cygwin. Now I am trying cygwin on a virtual machine and when I type 'backspace', instead of a single character being deleted, the entire word gets deleted. How do I change the settings for it? I read somewhere that I... (2 Replies)
Discussion started by: ladyAnne
2 Replies

4. Shell Programming and Scripting

Replace multiple occurances of same character with a single character.

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 ... (3 Replies)
Discussion started by: dipanchandra
3 Replies

5. Shell Programming and Scripting

Count number of occurences of a character in a field defined by the character in another field

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... (3 Replies)
Discussion started by: s052866
3 Replies

6. UNIX for Dummies Questions & Answers

SED: Can't Repeat Search Character in SED Output

I'm not sure if the problem I'm seeing is an artifact of sed or simply a beginner's mistake. Here's the problem: I want to add a zero-width space following each underscore between XML tags. For example, if I had the following xml: <MY_BIG_TAG>This_is_a_test</MY_BIG_TAG> It should look like... (8 Replies)
Discussion started by: rhetoric101
8 Replies

7. Shell Programming and Scripting

repeat character with printf

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 (13 Replies)
Discussion started by: ripat
13 Replies

8. UNIX for Dummies Questions & Answers

Trying to remove single character from a line

Here is a sample code grep '903' -i user.txt | tail -2 | awk '{print $2}' | sed 's/B//g' the input file has data as such 903-xxx-xxxxB 903-xxx-xxxxB It is a dialer file i want to remove the "B" any help thanks (5 Replies)
Discussion started by: Iz3k34l
5 Replies

9. Shell Programming and Scripting

Vi single character change

I know this is strictly a programming forum - but I consider vi a programming enabler and the question relates to regex you'd use with awk/sed anyway.... I have a file which is 50,000+ lines long and need to change many many instances of word_word_word to be word+word+word where... (6 Replies)
Discussion started by: Brett Taylor
6 Replies

10. Programming

reading a single character in C

Can anyone help me????? My problem is that i want to read only one charcter from keyboard. Each time my program waits to press enter or ^d. I don't want that. As soon as i press a charcter it should proceed to next statement in program without pressing enter or ^d. please help... (3 Replies)
Discussion started by: alodha
3 Replies
Login or Register to Ask a Question