我有下面的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
行与 d
和 a
连接起来。
你不想要最后一行,所以我使用line
延迟打印,最后一行不会打印出来(虽然它确实保存到line
,如果可以使用给出了一个 END
block )。
关于linux - unix中的csv文件操作并将值附加到每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54180287/