Replace character string between new lines

Multi tool use


Replace character string between new lines
I am trying to edit a file such that strings flanked by new lines are removed.
My file looks like:
ENSG00000000460_chr1.dat
varX data data data data data
varX data data data data data
varX data data data data data
ENSG00000005801_chr11.dat
ENSG00000006007_chr16.dat
ENSG00000006607_chr2.dat
varX data data data data data
varX data data data data data
ENSG00000010219_chr12.dat
ENSG00000011052_chr17.dat
The output I am trying to get would delete lines which are flanked by new lines (and delete the new lines) resulting in output which looks like:
ENSG00000000460_chr1.dat
varX data data data data data
varX data data data data data
varX data data data data data
ENSG00000006607_chr2.dat
varX data data data data data
varX data data data data data
I have tried various ideas in sed, but it either returns:
sed 's/[na-zA-Z0-9n]//g' file.txt | head
_.
. .- . . . . .
. .- . . . . .
-. .- . . . . .
-. .- . . . . .
_.
_.
I also tried:
sed 's/[n][a-zA-Z0-9][n]//g' file.txt | head
but this returns the file as is:
ENSG00000000460_chr1.dat
varX data data data data data
varX data data data data data
varX data data data data data
ENSG00000005801_chr11.dat
ENSG00000006007_chr16.dat
ENSG00000006607_chr2.dat
varX data data data data data
varX data data data data data
ENSG00000010219_chr12.dat
ENSG00000011052_chr17.dat
I never worked with sed, but if it works like normal regex, then I dont understand why so many people do not understand the meaning of
[ ]
.– Fallenhero
7 mins ago
[ ]
[na-zA-Z0-9n]
means: 1 of (n or letters or numbers)– Fallenhero
6 mins ago
[na-zA-Z0-9n]
please look up what
[ ]
mean. because [^a-zA-Z0-9$]
means any 1 symbol that is NOT a letter, number or $– Fallenhero
3 mins ago
[ ]
[^a-zA-Z0-9$]
1 Answer
1
Could you please try following:
awk '/_chr/ && flag{flag=val=""} /_chr/{val=$0;next} val && NF && !/_chr/{if(val){print val;val=""};flag=1} flag;END{if(flag){print val}}' Input_file
Adding a non-one liner form of solution too now.
awk '
/_chr/ && flag{
flag=val=""
}
/_chr/{
val=$0;
next
}
val && NF && !/_chr/{
if(val){
print val
val=""
}
flag=1
}
flag
END{
if(flag){
print val}
}' Input_file
This does work! May I ask for an explanation as to what it's doing?
– Lynsey Hall
3 mins ago
@LynseyHall, on it, will add in few mins.
– RavinderSingh13
2 mins ago
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
what is your try giving output.
– trighati
7 mins ago