【发布时间】:2019-06-12 19:31:01
【问题描述】:
我有一个 CSV 文件,我逐行读取文件。
假设这条线是:
10h50 10 15 20
我想得到的是:
<tr> <th scope="row">10h50</th> <td>10</td> <td>15</td> <td>20</td> </tr>
我开始了一些事情,但不确定这是否是最好的方法。
我有文件result.csv :
10h50,10,15,20
10h51,11,15,22
10h52,12,16,30
这个想法是:
cat result.csv | sed 's/,/ /g' > temp.csv
然后:
awk '{print $1}' temp.csv > time.csv
awk '{print $2}' temp.csv > col1.csv
awk '{print $3}' temp.csv > col2.csv
awk '{print $4}' temp.csv > col3.csv
开启time.csv
cat time.csv | sed 's/^/<tr> <th scope="row">/' | sed 's/$/<\/th> <\/tr>/' > new_time.csv
cat col1.csv | sed 's/^/<td>/' | sed 's/$/<\/td>' > new_col1.csv
cat col2.csv | sed 's/^/<td>/' | sed 's/$/<\/td>' > new_col2.csv
cat col3.csv | sed 's/^/<td>/' | sed 's/$/<\/td>' > new_col3.csv
然后:
paste new_date.csv new_col1.csv new_col2.csv new_col3.csv | column -s $'\t' -t > final_result.csv
有什么建议吗?
【问题讨论】:
-
您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只会在发布者已经尝试自己解决问题时提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出以及您实际获得的输出(控制台输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQ 和How to Ask。
-
@AustenHolland 我确实更新并展示了到目前为止我尝试做的事情......请告知是否有更好的方法来做我正在寻找的事情。
-
@AustenHolland 我不需要任何代码...我只需要建议或指导...代码已经存在...但是有更好的方法吗?
-
pluse-uno 用于显示您的代码! ……但是……哎哟!!!您现在在下面有两个很好的答案,基本上向您展示了您的目标应该始终是读取数据一次,重新格式化并打印出来,而无需使用其他 shell 进程。如果您要继续这种工作,请通过Awk Tutorial 工作,您很快就会编写出高效且易于维护的代码。祝你好运。
-
每次您使用
awk、sed、cat等时,您都有系统启动程序的“费用”。编写一个程序来处理一个问题的首选方法。有时使用|(管道)将多个程序链接在一起更容易,这只是经验和评估其他权衡的问题。尝试解决一般问题(使用程序),然后用管道将它们链接在一起。对于您当前的情况,您只需要一个程序awk -f myawkScript inputFile > outputFile。祝你好运!