I have a text file that I am trying to modify. I am taking the input file that has lines of the form of
(y+1/4,-x+1/2,z+3/4)
and trying to change it to
0 1 0 -1 0 0 0 0 1 1 / 4 1 / 2 3 / 4
I currently can get to this point
0 1 0 1/4 -1 0 0 1/2 0 0 1 3/4
using
#!bin/bash
filename="227.dat"
sed -i 's/(/ /g' $filename
sed -i 's/)//g' $filename
sed -i 's/,/ /g' $filename
sed -i 's/-x/-1 0 0/g' $filename
sed -i 's/x/ 1 0 0/g' $filename
sed -i 's/-y/ 0 -1 0/g' $filename
sed -i 's/y/ 0 1 0/g' $filename
sed -i 's/-z/ 0 0 -1/g' $filename
sed -i 's/z/ 0 0 1/g' $filename
sed -i '/+/! s/$/ 0 \/ 1 0 \/ 1 0 \/ 1/' $filename
while ((i++)); read -r line; do
if [[ $line == *[+]* ]]
then
sed -i 's/+/ /g' $filename
echo $i
fi
done < "$filename"
The reason for the echo $i was to see that it correctly gives the line number and I thought perhaps I could use it for commands on those specific lines. I am doing this conversion as the code we use in creating crystal structures needs the vector notation with fractions at the end, not the x,y,z notation. I already know this is not the "prettiest" or simplest solution, but I am very new to all of this and it's what I have been able to piece together so far. Any suggestions?
...given, your input, returns:
...which as far as I can tell is correct.
A more complex approach, making unfounded extrapolations (given the lack of detail and exemplars in the question itself), might look like:
Given the sample inputs provided in a comment on this answer, output is:
Here's an approach that may simplify the parsing. Read each line into an array using IFS set to all possible delimiters and characters you don't care about: