免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2044 | 回复: 3
打印 上一主题 下一主题

如何优化下面的程序Text 转csv [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-10 19:55 |只看该作者 |倒序浏览
sed 's/,//g' $1 > test.txt
sed 's/D E S C R I P T I O N/D E S C R I P  T I O N /g' test.txt > testA.txt
sed 's/LAST YEAR/LAST-YEAR/g' testA.txt > testB.txt
rm -f $1.csv
touch $1.csv
while read i
do
HOMEOWNER=`echo $i | grep HOMEOWNER | wc -l`; export HOMEOWNER
FEES=`echo $i | grep FEES | wc -l`; export FEES
RENTAL=`echo $i | grep RENTAL | wc -l`; export RENTAL
YEAR=`echo $i | grep YEAR | wc -l`; export YEAR
ACTUALS=`echo $i | grep ACTUALS | wc -l`; export ACTUALS
if [ $HOMEOWNER -gt 0 -o $FEES -gt 0 -o $RENTAL -gt 0 -o $ACTUALS -gt 0 ]; then
   DESCRIPT=`echo "$i" | cut -c1-36`; export DESCRIPT
   RESTST=`echo "$i" | cut -c37- | awk -v FIELDWIDTHS='13 14 13 14 17 13 13' -v OFS=',' '{$1=$1;print }'` ; export RESTST
   echo "$DESCRIPT"",""$RESTST">> testC.txt
elif [ $YEAR -gt 0 ]; then
   RESTST=`echo "$i" | awk -v FIELDWIDTHS='13 14 13 14 17 13 13' -v OFS=',' '   {$1=$1;print }'` ; export RESTST
   echo ",""$RESTST">> testC.txt
else
   echo "$i" >> testC.txt
fi
done < testB.txt
tr -d '\r' < testC.txt > $1.csv

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2012-06-11 08:46 |只看该作者
建议给出源数据例子/目的数据例子/转化规律

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
3 [报告]
发表于 2012-06-21 10:56 |只看该作者
本帖最后由 rdcwayx 于 2012-06-21 11:15 编辑
schrosourcexuey 发表于 2012-06-10 19:55
sed 's/,//g' $1 > test.txt
sed 's/D E S C R I P T I O N/D E S C R I P  T I O N /g' test.txt > testA ...

大概看懂了你的意思,但是代码写得实在太烂。

其实只要提供源文件,和期望的输出,大家就可以直接帮你。

下面的代码是按照你现有的思路改了,无需多个临时文件,无需while 循环。我代码中的testB其实是可以不需要的,但是没看到原文件, 先这样用吧。
  1. rm -f $1.csv

  2. awk '{gsub(/,/,"");gsub(/D E S C R I P T I O N/,"D E S C R I P  T I O N ");gsub(/LAST YEAR/,"LAST-YEAR")}1' $1 > testB.txt

  3. awk '/HOMEOWNER/||/FEES/||/RENTAL/||/YEAR/||/ACTUALS/{ DESCRIPT=substr($0,0,35); RESTST=substr($0,37) }       # You need explain how to get RESTST value
  4.        /YEAR/{ RESTST="HERE is not clear enough." }                # You need explain how to get RESTST value
  5.      
  6.        print DESCRIPT, RESTST
  7.       }' OFS="," testB.txt > $1.csv
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-06-21 18:22 |只看该作者
text的内容呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP