繁体   English   中英

bash shell 脚本,它从文本文件中获取两列数据并使用带有两个变量的 for 循环

[英]bash shell script that takes two columns of data from text file and uses a for loop with two variables

我正在尝试获取一个包含两列数据的文本文件,并在每一行上循环,将 html 表标签应用于每一列并写入另一个文件,例如

例子.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 循环在哪里搞砸了?

你需要一个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

您应该阅读 Bash read命令并决定是否需要-r选项。

我假设还有其他代码可以打印 HTML 标题和正文以及表格标题和结束标记等。

这更适合 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>

也试试这个方法

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM