如何在某些条件下分配csv文件的某个参数

时间:2015-05-19 12:20:45

标签: csv awk

我有一个金发碧眼的时刻。

如何在csv文件中为变量分配* 10 * th参数。

例如,如果我将这些数据作为mycsvfile.csv中最后四行中的最后四行...:

1432013000,m,NL,ABC,007,d,SVlts,675,1231537,24912,29017,24855
1432014000,m,NL,ABC,007,d,status,675,1243000,3570,-33.836465,151.051189
1432013632,m,NL,MSV,001,d,SVlts,675,631475,26979,29275,26462
1432013638,m,NL,MSV,001,d,status,675,638000,35770,-33.836465,151.051189
1432014232,m,NL,MSV,001,d,SVlts,675,1231537,24912,29017,24855
1432014243,m,NL,MSV,001,d,status,675,1243000,35780,-33.836465,151.051189

...我想访问 last 行,其中第4和第5个参数分别等同于MSV和001,状态为'作为第7个参数,如何将第10个参数(在本例中为35780)分配给名为my_var的变量?

会是这样的:

my_var=`awk -F, "$4 == MSV && $5 == 001 && $7 == status" {print $10} | /directory/mycsvfile.csv tail -1`

同样适用于ABC 007

my_var=`awk -F, "$4 == ABC && $5 == 007 && $7 == status" {print $10} | /directory/mycsvfile.csv tail -1`

1 个答案:

答案 0 :(得分:2)

我会说:

$ awk -F, '$4=="MSV" && $5=="001" && $7=="status" {v=$10} END {print v}' file
35780

或存储到var:

$ my_var=$(awk -F, '$4=="MSV" && $5=="001" && $7=="status" {v=$10} END {print v}' file)
$ echo "$my_var"
35780

这与条件匹配时保持存储第10个字段。然后它将打印最后一个,因为它总是被覆盖。

如果文件很大,您也可以使用tac向后打印并使用print; exit,这样就无法进一步处理文件:

tac file | awk -F, '$4=="MSV" && $5=="001" && $7=="status" {print $10; exit}'

请注意我使用的语法,而您说的是"$4 == MSV && $5 == 001 && $7 == status" {print $10}。通常,使用awk '...'语法和双引号字符串比较。