2015-10-30 42 views
-1

我试图将带有两列数据的文本文件和遍历每行应用html表标记到每列的文本文件并写入到另一个文件,例如bash shell脚本,从文本文件中获取两列数据,并使用for循环和两个变量

example.txt中

1 pool1 
2 pool2 
3 pool3 

这是我到目前为止所。

for line in $(cat example.txt); do 
    count=$(echo $line | awk -F " " '{print$1}') 
    pool=$(echo $line | awk -F " " '{print$2}') 
    printf "\t<tr>\n\t <td>%s</td> <td>%s</td>\n\t</tr>\n" $count $pool >> example_info.html 
done 

电流输出:

<tr> 
    <td>1</td> 
    <td></td> 
    </tr> 
    <tr> 
    <td>pool1</td> 
    <td></td> 
    </tr> 
    <tr> 
    <td>2</td> 
    <td></td> 
    </tr> 
    <tr> 
    <td>poo2</td> 
    <td></td> 
    </tr> 
    <tr> 
    <td>3</td> 
    <td></td> 
    </tr> 
    <tr> 
    <td>poo3</td> 
    <td></td> 
    </tr> 

所需的输出:

<tr> 
    <td> 1 </td> 
    <td> pool1 </td> 
    </tr> 
    <tr> 
    <td> 2 </td> 
    <td> pool2 </td> 
    </tr> 
    <tr> 
    <td> 3 </td> 
    <td> pool3 </td> 
    </tr> 

任何人都可以指出哪里我的for循环搞砸?

回答

0

试试这个方法也

sed 's/\(.*\) \(.*\)/<tr>\n <td> \1 <\/td>\n <td> \2 <\/td>\n<\/tr>/' FileName 

输出:

<tr> 
<td> 1 </td> 
<td> pool1 </td> 
</tr> 
<tr> 
<td> 2 </td> 
<td> pool2 </td> 
</tr> 
<tr> 
<td> 3 </td> 
<td> pool3 </td> 
</tr> 
1

你需要一个while read循环:

while read count pool 
do 
    printf "\t<tr>\n\t<td>%s</td><td>%s</td>\n\t</tr>\n" $count $pool >> example_info.html 
done < example.txt 

您应该猛砸read命令读取并决定是否需要-r选项或不。

我认为有其他代码打印的HTML标题和身体,表头和结束标记等

0

这是更适合的awk:

awk '{print "<tr>"; for (i=1; i<=NF; i++) print "\t<td> " $i " </td>"; print "</tr>"}' file 
<tr> 
    <td> 1 </td> 
    <td> pool1 </td> 
</tr> 
<tr> 
    <td> 2 </td> 
    <td> pool2 </td> 
</tr> 
<tr> 
    <td> 3 </td> 
    <td> pool3 </td> 
</tr> 
相关问题