linux - unix中的csv文件操作并将值附加到每一行

标签 linux shell awk sed

我有下面的csv文件

,,,Test File,
,todays Date:,01/10/2018,Generation date,10/01/2019 11:20:58
Header 1,Header 2,Header 3,Header 4,Header 5
,My account no,100102GFC,,
A,B,C,D,E
A,B,C,D,E
A,B,C,D,E
TEST

我需要提取第二行第三列中的今天日期 以及第 4 行第 3 列中的帐号。

下面是我必须创建的新文件,那些提取的值 从第 3 行和第 4 行开始需要附加在文件末尾。 新文件将包含第 4 行和 n-1 行的数据

A,B,C,D,E,01/10/2018,100102GFC
A,B,C,D,E,01/10/2018,100102GFC
A,B,C,D,E,01/10/2018,100102GFC

请问您能帮我如何在 shell 脚本中做同样的事情吗?
这是我尝试过的,我是 shell 脚本的新手,无法将所有这些结合起来

从第二行提取日期

sed -sn 2p test.csv| cut -d ',' -f  3

提取账号

sed -sn 3p test.csv| cut -d ',' -f  3

提取实际数据

tail -n +5 test.csv | head -n -1>temp.csv

最佳答案

试试awk:

awk -F, 'NR==2{d=$3}NR==4{a=$3}NR>4{if (line) print line; line = $0 "," d "," a;}' Inputfile.csv

例如:

$ cat file1
,,,Test File,
,todays Date:,01/10/2018,Generation date,10/01/2019 11:20:58
Header 1,Header 2,Header 3,Header 4,Header 5
,My account no,100102GFC,,
A,B,C,D,E
A,B,C,D,E
A,B,C,D,E
TEST

$ awk -F, 'NR==2{d=$3}NR==4{a=$3}NR>4{if (line) print line; line = $0 "," d "," a;}' file1
A,B,C,D,E,01/10/2018,100102GFC
A,B,C,D,E,01/10/2018,100102GFC
A,B,C,D,E,01/10/2018,100102GFC

在我编辑你的问题之前误解了你的意思,之后更新了我的答案。

awk 命令中:
NR表示行号,-F分配分隔符,d存储日期a账号。
只是将 $0 行与 da 连接起来。
你不想要最后一行,所以我使用line延迟打印,最后一行不会打印出来(虽然它确实保存到line,如果可以使用给出了一个 END block )。

关于linux - unix中的csv文件操作并将值附加到每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54180287/

相关文章:

python - 安装错误(--site-dirs)python 2.6 和 setuptools

python - 如何使用python启动交互式shell程序?

linux - 如何在linux命令中放置变量?

linux - 从压缩文件中快速 grep 多个值

linux - linux调度程序是否需要上下文切换?

linux - pbuilder-dist xenial 构建失败

multidimensional-array - awk 中的多维数组

Linux bash脚本从文件中提取数据

linux - 为什么 Ubuntu 18.04 使用 `/sbin/init` 而不是 `systemd` ?

unix - 将版权信息插入多个文件