我试图将sed命令的结果回显给另一个.html文件。 sed命令是逐行读取.txt文件,并仅使用逗号分隔符分隔的第二个值。
这是我有的:
ind=1
while [ $ind -lt 4 ]
do
echo "<tr><td>" >> ${HTML_FILE}
echo "`sed -n '$ind p' ${TEXT_FILE} | awk -F ',' '{print $2}'`" >> ${HTML_FILE}
echo "</td></tr>" >> ${HTML_FILE}
ind=$((ind+1))
done
$ {TEXT_FILE}的内容:
709A8, Text 1 | 34%
354Y7, Text 2 | 86%
F1065, Text 3 | 100%
当我运行我的代码时,这是我的输出。由于某种原因,它打印'nd p':
<tr><td>
nd p
</td></tr>
<tr><td>
nd p
</td></tr>
<tr><td>
nd p
</td></tr>
预期输出应该是这样的:
<tr><td>Text 1 | 34%</td></tr>
<tr><td>Text 2 | 86%</td></tr>
<tr><td>Text 3 | 100%</td></tr>
或者只是awk:
awk -F, 'NR < 4 {print "<tr><td>" $2 "</td></tr>"}' "$TEXT_FILE" >> "$HTML_FILE"
用GNU sed。我从s///
切换到s|||
,从正则表达式切换到扩展正则表达式(-r
)。
sed -r 's|^[^,]*, (.*)|<tr><td>\1</td></tr>|' file
输出:
<tr><td>Text 1 | 34%</td></tr>
<tr><td>Text 2 | 86%</td></tr>
<tr><td>Text 3 | 100%</td></tr>
至少,完全抛弃sed
和awk
。每行运行一次是过度的。
ind=1
while [ "$ind" -lt 4 ]
do
IFS=, read _ x _
echo "<tr><td>$x</td></tr>"
ind=$((ind+1))
done < "$TEXT_FILE" >> "$HTML_FILE"