3

用shell命令处理数据

 2 years ago
source link: https://houye.xyz/2016-09/shellcommand/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
用shell命令处理数据

用shell命令处理数据

有 2 份csv格式的数据,内容大概是这样的

"riid:cb33ecb9-b76b-4633-9d80-26723838a0ba","1","32049683@JS"
"riid:ced95b55-a3cb-4f24-b440-d56b5bf9f476","1","32000928@JS"
"riid:87c1b470-1b4a-4969-95fc-09d39e1b2182","1","32010008@JS"

第一列是主键,第二列是状态值,主要是比对这两列,一份文件中包含另一份中所有的riid,几万行至十几万行的数据,用excel处理,电脑卡的动不了,于是打算扔到 linux 下处理下,大致分为分列、去引号、排序、比对。

我们不需要最后一列数据,可以将其去掉

cat 1.csv |cut -d \, -f 1,2 > 2.csv

-d 指定分隔符,在这里是逗号,-f 选择需要的字段,我们需要第一列和第二列,最后用重定向符号> 将截取的数据输出到文件。2.csv 的内容是这样的。

"riid:cb33ecb9-b76b-4633-9d80-26723838a0ba","1"
"riid:ced95b55-a3cb-4f24-b440-d56b5bf9f476","1"
"riid:87c1b470-1b4a-4969-95fc-09d39e1b2182","1"

引号没什么用,还影响比较,可以将其去掉。

sed -i 's/"//g' 2.csv

因为引号只出现在数据列两边,所以处理比较简单.

riid:cb33ecb9-b76b-4633-9d80-26723838a0ba,1
riid:ced95b55-a3cb-4f24-b440-d56b5bf9f476,1
riid:87c1b470-1b4a-4969-95fc-09d39e1b2182,1

排序很简单

sort 2.csv -o 2.csv

对2.csv 进行排序,结果输出到原文件。 也可以只按照某列排序

sort -t, -k 1 2.csv -o 2.csv

以逗号为分隔符,按第一列的字符升序进行排序,结果输出到原文件。

接下来就可以比对了

2 个文件中相同的部分

comm -12 2.csv 3.csv

2 个文件中状态值不一致的部分

diff 1.csv 2.csv -y | grep \|

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK