Chinaunix

标题: 对二个文件的操作 [打印本页]

作者: bpzhang2008    时间: 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文件最后一列
作者: personball    时间: 2012-08-14 14:23
回复 1# bpzhang2008
  1.     awk -F, '{print $NF}' b|paste a -
复制代码

作者: bpzhang2008    时间: 2012-08-14 14:32
how to use?
回复 2# personball


   
作者: bpzhang2008    时间: 2012-08-14 14:38
知道了,十分感谢回复 2# personball


   
作者: personball    时间: 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
作者: bpzhang2008    时间: 2012-08-14 14:45
还想请教一下
b文件的第一行是处理掉了,可是a文件的第一行也是不想要的,怎么在贴到a文件的时候把a的第一行也过滤掉呢
回复 5# personball


   
作者: personball    时间: 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部分,即处理第二个文件时,略过第一行,输出该行,以及记录的上一个文件的最后一列值(相同行号)
作者: bpzhang2008    时间: 2012-08-14 15:13
可是我运行了之后,结果a文件的第一行没有被输出来,第一行我还是想要的,要不就修改下a文件然后用b文件的最后一列给它赋值即使有你提供的第一种方法,不过滤第一行处理了
回复 7# personball


   
作者: personball    时间: 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]是空的,不用管
作者: bpzhang2008    时间: 2012-08-14 15:27
可能是我之前描述的问题吧,现在好了,这个结果就是我想要的,看来shell的路子还有很长路要走
回复 9# personball


   
作者: personball    时间: 2012-08-14 15:28
回复 10# bpzhang2008


    恩,我混了5个月,也还是菜鸟一个
都没静下心玩过sed。。。

作者: bpzhang2008    时间: 2012-08-14 15:29
我发现这个东东实在是太好了,谁用谁知道。一起探讨
回复 11# personball


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2