我有一个金发碧眼的时刻。
如何在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`
答案 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 '...'
语法和双引号字符串比较。