我有一个csv,其中包含以下数据
10.000.00.00,D3,1
10.001.00.00,C4,2
10.002.00.00,C5,2
10.000.88.99,B1,3
10.000.00.00,B2,3
10.000.00.00,C6,3
10.000.99.00,D1,3
尝试以下代码
cat Data.csv | awk -F , '$3 == "3" { print }'
仅需要获取最后一个值为3的行。
请让我知道该怎么做
答案 0 :(得分:5)
使用awk 仅获取最后值为3的行:
$ awk -F, '$NF==3' file
10.000.88.99,B1,3
10.000.00.00,B2,3
10.000.00.00,C6,3
10.000.99.00,D1,3
解释:
awk -F, ' # set the field separator to a comma
$NF==3 # NF is the last field, $NF last field value (see comments for more
' file #thanks @kvantour)
答案 1 :(得分:2)
您可以尝试使用sed:
sed '/,3$/!d' infile
如果行尾可以有\ r,请尝试以下方式:
sed '/,3\r*$/!d' infile
答案 2 :(得分:2)
为什么我们首先需要
awk
或sed
进行这种操作???难道不是太强了吗?OP正在询问有关提取满足特定条件的某些行的信息 条件,甚至不需要修改其格式...
grep
是 的完美工具。
$ grep ',3$' Data.csv
10.000.88.99,B1,3
10.000.00.00,B2,3
10.000.00.00,C6,3
10.000.99.00,D1,3
如果您有Windows EOL,最终grep -E ',3\r?$' Data.csv
。
也请尽量避免使用cat <FILE> | <COMMAND>
,而是直接将文件传递给命令或将stdin
从文件重定向到命令(Command < file
)。
答案 3 :(得分:0)
您可以为此使用内置的awk变量。
在我们的情况下
'$ NF'-NF用于当前记录中的字段数
awk -F, '{if($NF == 3) {print $0} }' Data.csv
10.000.88.99,B1,3
10.000.00.00,B2,3
10.000.00.00,C6,3
10.000.99.00,D1,3
您可以通过以下链接了解有关内置变量的更多信息: Awk Built in Variables