Unix中的CSV文件操作并将值附加到每一行

时间:2019-01-14 11:05:52

标签: 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行和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

3 个答案:

答案 0 :(得分:0)

尝试backLayer: Container( color: Colors.blue, child: ListView( children: <Widget>[ ListTile( title: Text("Screen two"), onTap: () { go(1); //page index }, ), ListTile( title: Text("Screen three"), onTap: () { go(2); }, ) ], ), ), frontLayer: Container( color: Colors.white, child: PageView( onPageChanged: onPageChanged, //page changed function controller: _pageController, //controller physics: NeverScrollableScrollPhysics(), //disable swipe children: <Widget>[ HelloScreen(), //put your screens here. ScreenTwo(), ScreenThree(), ], ), ),

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只需将行$0d连接起来。
您不希望最后一行,所以我使用a来延迟打印,最后一行不会打印出来(尽管它确实保存到了line,并且如果line也可以使用块)。

答案 1 :(得分:0)

您也可以尝试Perl

$ cat  dawn.txt
,,,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

$ perl -F, -lane ' $dt=$F[2] if $.==2 ; $ac=$F[2] if $.==4; if($.>4 and ! eof) { print "$_,$dt,$ac" } ' dawn.txt
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

$

答案 2 :(得分:0)

id

或者,取决于您的要求和实际输入数据:

<span  id="product-price-895"  data-price-amount="12.95" data-price-type="finalPrice" class="price-wrapper " >
<span class="price">€ 12,95</span>
</span>