有 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
以逗号为分隔符,按第一列的字符升序进行排序,结果输出到原文件。
接下来就可以比对了
comm -12 2.csv 3.csv
diff 1.csv 2.csv -y | grep \|