csv - 从 Linux 中的文件中删除特定的行/行或重复项
问题描述
我想使用特定变量“SAMPLE”下的值从 Linux 上的 .csv 文件(名为“mydata”)中删除特定行。实际上,我的文件中有 250 个副本,原始文件有 15000 行和 66 列,我想删除每个副本的一个副本并保留一个。如果您查看其他变量,例如“ID”,您会看到重复项。因此,如果我可以根据“SAMPLE”列中的值删除重复项或特定行,那么任何解决方案都对我有用。SAMPLE 是我的数据中唯一重复名称不同的列。我的数据看起来像这样;
ID SAMPLE LABNO Oth_ID sex age bmi ca_1 pd_7
1003341 21863 21863 NA 1 48.68 22.42 0 0
1003343 22697 22697 NA 1 48.98 23.25 0 0
1003347 4421 4421 NA 1 48.70 25.56 NA NA
1003348 1642 1642 NA 1 48.72 16.57 NA NA
1003349 4163 4163 6069 1 49.02 23.47 1 NA
1003349 6069 4163 6069 1 49.02 23.47 1 NA
1003356 5347 9053 5347 1 49.08 24.81 0 0
1003356 9053 9053 5347 1 49.08 24.81 0 0
1003357 695 695 NA 1 49.08 22.32 NA NA
1003360 19833 19833 NA 1 48.55 22.48 0 0
1003365 5392 6843 5392 1 48.70 23.08 0 0
1003365 6843 6843 5392 1 48.70 23.08 0 0
解决方案
您可以使用一个简单的sort
命令。只需使用-k
键定义正确的列并添加-u
选项以使结果集 uniq:
sort -k 3,4 -u < mydata.csv
在这个答案中,我假设您正在寻找基于LABNO
和Oth_ID
列的唯一值,即数字3
和4
。
实际上要保持列名在最上面使用:
# Write the top line to the new file
head -n 1 mydata.csv > mydata.uniq.csv
# Make unique, sort and append other lines
tail -n +2 mydata.csv | sort -k 3,4 -u | sort -V >> mydata.uniq.csv
之前:
ID SAMPLE LABNO Oth_ID sex age bmi ca_1 pd_7
1003341 21863 21863 NA 1 48.68 22.42 0 0
1003343 22697 22697 NA 1 48.98 23.25 0 0
1003347 4421 4421 NA 1 48.70 25.56 NA NA
1003348 1642 1642 NA 1 48.72 16.57 NA NA
1003349 4163 4163 6069 1 49.02 23.47 1 NA
1003349 6069 4163 6069 1 49.02 23.47 1 NA
1003356 5347 9053 5347 1 49.08 24.81 0 0
1003356 9053 9053 5347 1 49.08 24.81 0 0
1003357 695 695 NA 1 49.08 22.32 NA NA
1003360 19833 19833 NA 1 48.55 22.48 0 0
1003365 5392 6843 5392 1 48.70 23.08 0 0
1003365 6843 6843 5392 1 48.70 23.08 0 0
后:
ID SAMPLE LABNO Oth_ID sex age bmi ca_1 pd_7
1003341 21863 21863 NA 1 48.68 22.42 0 0
1003343 22697 22697 NA 1 48.98 23.25 0 0
1003347 4421 4421 NA 1 48.70 25.56 NA NA
1003348 1642 1642 NA 1 48.72 16.57 NA NA
1003349 4163 4163 6069 1 49.02 23.47 1 NA
1003356 5347 9053 5347 1 49.08 24.81 0 0
1003357 695 695 NA 1 49.08 22.32 NA NA
1003360 19833 19833 NA 1 48.55 22.48 0 0
1003365 5392 6843 5392 1 48.70 23.08 0 0
推荐阅读
- javascript - 为什么此 JavaScript 代码的输出“未声明”?
- java - 为什么 CDI 事件是通用的?
- monaco-editor - 摩纳哥编辑器在选择片段中自动按 Tab
- python - 更改特定列中的值(熊猫)
- html5-canvas - 如何检测对象是否在html5移相器中
- python-3.x - 打包软件:错误收集测试/ TOX
- python - 完全嵌套 NumPy 结构化标量
- visual-studio-2017 - 在visual studio installer2017如何选择DotNet40 prerequiste?
- php - MySQL触发器在PHP中不起作用
- swift - 如何从另一个对象的引用中查询 Realm 对象?