Как отобразить результат sed в файл в bash? - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь отобразить результат команды 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>

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

По крайней мере, отказаться от 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"
0 голосов
/ 13 сентября 2018

Или просто awk:

awk -F, 'NR < 4 {print "<tr><td>" $2 "</td></tr>"}' "$TEXT_FILE" >> "$HTML_FILE"
0 голосов
/ 13 сентября 2018

С 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...