a sed answer was already stated by Sukhdeep, which is (by the way) much more efficient than this one. it doesn't make sense to store all line contents into a variable just to remove its last character, as it will slow the regex.
1 903641 927394 224 C1orf170,
1 927395 936954 225 RP11-54O7.17,HES4,
1 943677 957199 228 RP11-54O7.11,ISG15,AGRN,
1 957200 974400 229 AGRN,
1 1005127 1034268 234 RNF223,C1orf159,
1 1049052 1062659 239 C1orf159,
1 1069046 1083958 242 RP11-465B22.5,
1 1096739 1107115 246 RP11-465B22.8,MIR429,MIR200B,MIR200A,
1 1107116 1109732 247 TTLL10,
1 1109733 1122642 248 TTLL10-AS1,TTLL10,
5 answers
Using sed
sed 's/,$//' file > file2
although enough answers have already been stated, and since this question does completely sound like a homework assignment, I will try to top them all: does that "bed file" come from a previous gene annotation process which is printing a comma character at the end of each gene so, oh my, you need to remove the last gene's comma character?
my first choice for removing last comma characters would be Sukhdeep's sed -i 's/,$//' file.bed, but if the situation is the one I've just described in the previous paragraph then I would better suggest you to correct your previous script, as it's not a good idea to leave imperfections inside a script and try to correct them afterwards, specially if you're learning to code.
and as a final top guess... would that annotation script be written in perl, where the gene information is being printed in a similar manner to
foreach $gene (@genes) { print "$gene," }
? if so, you may correct your problem by using the join function like
print join ",", @genes
the output of your annotation script won't have that comma at the end of each line.
Remove one trailing ',' from the end of every line in a file:
while read line; do
echo ${line%,}
done < input.file > output.file
(If I understand you correctly)
A more general approach with awk lets you clean any field:
$ awk '{ print $1"\t"$2"\t"$3"\t"$4"\t"substr($5, 1, length($5)-1); }' in.bed > out.bed
For instance, if you had a BED file with the ID in the fourth column and the score in the fifth column, and you wanted to clean the fourth column:
$ awk '{ print $1"\t"$2"\t"$3"\t"substr($4, 1, length($4)-1)"\t"$5; }' in.bed > out.bed
sed -i 's/(.*),/\1 /' file
Log in to answer this question.