I have code in bash for making latex file and in this fragment I want to make a table in a loop:
while IFS= read -r line; do
if [[ "$line" == *"comment"* ]]; then
echo "${line#*comment: }" >> tif_list.txt
IN="${line#*comment: }"
data="$(echo $IN | tr "," "\n")"
echo " ${data[0]}" >> table.tex #name
echo " & ${data[2]}" >> table.tex #longitude
echo " & ${data[3]}" >> table.tex #latitude
echo " & ${data[4]}, ${data[5]}, ${data[6]}, ${data[7]}, ${data[8]}, ${data[9]}, " >> table.tex #dimensions
echo " & ${data[10]}" >> table.tex #time
echo " & ${data[1]}" >> table.tex #comments
echo " & \includegraphics[width=3.5cm]{${tif%.*}.png}\\" >> table.tex #adress
echo " \hline" >> table.tex
echo "" >> table.tex
fi
done < tif_info.txt
done
but echo first prints variables, and then my additional text:
\hline
Target0001
The operator places target notes here. Multiple lines OK.
55:51.6217 N
020:34.4421 E
C1
L3.0
W0.8
H1-1.0
H2-1.0
D16.8
2021:11:13 08:29:02.37
&
&
& , , , , , ,
&
&
& \includegraphics[width=3.5cm]{Target0001.png}\
\hline
I want:
\hline
Target0001
& The operator places target notes here. Multiple lines OK.
& 55:51.6217 N
& 020:34.4421 E
& C1, L3.0, W0.8, H1-1.0, H2-1.0, D16.8
& 2021:11:13 08:29:02.37
& \includegraphics[width=3.5cm]{Target0001.png}\
\hline
I was trying to add /& or merge text by += but it doesn't change anything. I just need to make it work so I could have table with pictures and metadata from my tiff pictures.
My whole code:
#!/bin/bash
#program pobiera metadane tiff i zestawia w tabeli
echo "Starting..."
echo "\documentclass{article}" > table.tex
echo "\usepackage{graphicx, tabularx}" >> table.tex
echo "\usepackage[margin=0.5in]{geometry}" >> table.tex
echo "\graphicspath{ {./images/} }" >> table.tex
echo "" >> table.tex
echo "\renewcommand\tabularxcolumn[1]{m{#1}}" >> table.tex
echo "\newcolumntype{b}{X}" >> table.tex
echo "\newcolumntype{s}{>{\hsize=.5\hsize}X}" >> table.tex
echo "" >> table.tex
echo "\begin{document}" >> table.tex
echo "" >> table.tex
echo "\begin{table}[htbp]" >> table.tex
echo " \centering" >> table.tex
echo " \begin{tabularx}{\textwidth} { " >> table.tex
echo " | >{\centering\arraybackslash}s " >> table.tex
echo " | >{\centering\arraybackslash}s " >> table.tex
echo " | >{\centering\arraybackslash}s " >> table.tex
echo " | >{\centering\arraybackslash}s " >> table.tex
echo " | >{\centering\arraybackslash}s " >> table.tex
echo " | >{\centering\arraybackslash}b " >> table.tex
echo " | >{\centering\arraybackslash}b | }" >> table.tex
echo " \hline" >> table.tex
echo " name & longitude & latitude & dimensions & time & comments & picture \" >> table.tex
echo " \hline" >> table.tex
echo "Serching comment..."
for tif in *.tif; do
[ -f "$tif" ] || break
identify -verbose "$tif" > tif_info.txt 2>&1
#convert "$tif" "${tif%.*}.png" 2>&1
while IFS= read -r line; do
if [[ "$line" == "comment" ]]; then
echo "${line#*comment: }" >> tif_list.txt
IN="${line#*comment: }"
data="$(echo $IN | tr "," "\n")"
echo " ${data[0]}" >> table.tex #name
echo " & ${data[2]}" >> table.tex #longitude
echo " & ${data[3]}" >> table.tex #latitude
echo " & ${data[4]}, ${data[5]}, ${data[6]}, ${data[7]}, ${data[8]}, ${data[9]}, " >> table.tex #dimensions
echo " & ${data[10]}" >> table.tex #time
echo " & ${data[1]}" >> table.tex #comments
echo " & \includegraphics[width=3.5cm]{${tif%.*}.png}\\" >> table.tex #adress
echo " \hline" >> table.tex
echo "" >> table.tex
fi
done < tif_info.txt
done
echo " \hline" >> table.tex
echo " \end{tabularx}" >> table.tex
echo "\end{table}" >> table.tex
echo "" >> table.tex
echo "\end{document}" >> table.tex
echo "" >> table.tex
echo "Process completed."
$data
as if it is an array, but it's not. Also, please add expected output. You should also preferprintf
overecho
, but for text processing, you might want to useawk
and notbash
in the first place. – pLumo Feb 14 '22 at 21:46,
to\n
, it's still a string. – pLumo Feb 14 '22 at 21:58