免费注册 查看新帖 |

Chinaunix

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

[文本处理] 对二个文件的操作 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-14 13:53 |只看该作者 |倒序浏览
a.csv
预置条件,测试目的,测试步骤,预期结果,实际结果
"1.测试服务器安装unittest++工具 2.服务器上部署需要依赖的liblog库3.被测试宏所定义的配置文件未被创建","宏DEFAULT_CONFIG_FILE定义的文件未被创建","1.新建测试用例testlibsetting.cpp2.编写makefile文件编译测试用例3.运行测试用例","1.创建实例失败2.输出错误日志",
"1.测试服务器安装unittest++工具 2.服务器上部署需要依赖的liblog库3.被测试宏所定义的配置文件未被创建","宏DEFAULT_CONFIG_FILE定义的文件未被创建","1.新建测试用例testlibsetting.cpp2.编写makefile文件编译测试用例3.运行测试用例","1.创建实例失败2.输出错误日志",
"1.测试服务器安装unittest++工具 2.服务器上部署需要依赖的liblog库3.被测试宏所定义的配置文件未被创建","宏DEFAULT_CONFIG_FILE定义的文件未被创建","1.新建测试用例testlibsetting.cpp2.编写makefile文件编译测试用例3.运行测试用例","1.创建实例失败2.输出错误日志",

b
casename,result
usemacrosasinput,success
usemacrosasinput,success
usemacrosasinput,failed

a b两个文件行数是一样的,现在想把b文件的最后一列放到对应的a文件的最后一列最后结果是这样的

预置条件,测试目的,测试步骤,预期结果,实际结果
"1.测试服务器安装unittest++工具 2.服务器上部署需要依赖的liblog库3.被测试宏所定义的配置文件未被创建","宏DEFAULT_CONFIG_FILE定义的文件未被创建","1.新建测试用例testlibsetting.cpp2.编写makefile文件编译测试用例3.运行测试用例","1.创建实例失败2.输出错误日志",success
"1.测试服务器安装unittest++工具 2.服务器上部署需要依赖的liblog库3.被测试宏所定义的配置文件未被创建","宏DEFAULT_CONFIG_FILE定义的文件未被创建","1.新建测试用例testlibsetting.cpp2.编写makefile文件编译测试用例3.运行测试用例","1.创建实例失败2.输出错误日志",success
"1.测试服务器安装unittest++工具 2.服务器上部署需要依赖的liblog库3.被测试宏所定义的配置文件未被创建","宏DEFAULT_CONFIG_FILE定义的文件未被创建","1.新建测试用例testlibsetting.cpp2.编写makefile文件编译测试用例3.运行测试用例","1.创建实例失败2.输出错误日志",failed

请各位给出一点意见,如果你们的系统不支持中文可以用英文把文件里面的内容换掉

现在我不知道从什么方法可以把b文件里面第二列拿出来赋值给a文件最后一列

论坛徽章:
0
2 [报告]
发表于 2012-08-14 14:23 |只看该作者
回复 1# bpzhang2008
  1.     awk -F, '{print $NF}' b|paste a -
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-08-14 14:32 |只看该作者
how to use?
回复 2# personball


   

论坛徽章:
0
4 [报告]
发表于 2012-08-14 14:38 |只看该作者
知道了,十分感谢回复 2# personball


   

论坛徽章:
0
5 [报告]
发表于 2012-08-14 14:40 |只看该作者
回复 3# bpzhang2008


    awk -F, '{print $NF}' b   # 输出最后一列,如果文件首行不要的话,就改成 awk -F, 'NR>1{print $NF}' b
paste a.csv  - #按列合并a.csv     - 代表标准输入

最终结果需要输入到文件的话,就这么来   awk -F, 'NR>1{print $NF}' b|paste a.csv  - >ResultFile

论坛徽章:
0
6 [报告]
发表于 2012-08-14 14:45 |只看该作者
还想请教一下
b文件的第一行是处理掉了,可是a文件的第一行也是不想要的,怎么在贴到a文件的时候把a的第一行也过滤掉呢
回复 5# personball


   

论坛徽章:
0
7 [报告]
发表于 2012-08-14 15:04 |只看该作者
本帖最后由 personball 于 2012-08-14 15:07 编辑

回复 6# bpzhang2008


    这样的话,干脆都用awk处理
  1. personball@vostro:~$awk -F, 'NR==FNR&&FNR>1{a[FNR]=$NF} NR>FNR&&FNR>1{print $0 a[FNR]}' b a.csv
复制代码
加点说明:
NR==FNR&&FNR>1 部分  即处理第一个文件,且略过第一行,以行号做下标记录最后一列的值
NR>FNR&&FNR>1部分,即处理第二个文件时,略过第一行,输出该行,以及记录的上一个文件的最后一列值(相同行号)

论坛徽章:
0
8 [报告]
发表于 2012-08-14 15:13 |只看该作者
可是我运行了之后,结果a文件的第一行没有被输出来,第一行我还是想要的,要不就修改下a文件然后用b文件的最后一列给它赋值即使有你提供的第一种方法,不过滤第一行处理了
回复 7# personball


   

论坛徽章:
0
9 [报告]
发表于 2012-08-14 15:22 |只看该作者
本帖最后由 personball 于 2012-08-14 15:23 编辑

回复 8# bpzhang2008


    囧,你在6L说不要a的第一行啊
要的话,就改下判断部分
NR>FNR&&FNR>1{print $0 a[FNR]}
改为
NR>FNR{print $0 a[FNR]}  #a[1]是空的,不用管

论坛徽章:
0
10 [报告]
发表于 2012-08-14 15:27 |只看该作者
可能是我之前描述的问题吧,现在好了,这个结果就是我想要的,看来shell的路子还有很长路要走
回复 9# personball


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP