我有一个csv文件,.Here是它的样子:
chr22, Position , A , B , C , D , E
22 , 16050115 , 0|0:404 , 0 , 0 , 0 , 1|1:5
22 ,16050213 ,0|0:403 , 0 , 0 , 0 , 3|4:6
22 , 16050607 , 1|0:340 , 1|1:3, 0 , 0 , 1|1:3
22 16050737 , 0|0:402 , 3|0:4 , 0|7:23 , 0 , 0
22 16050783 , 0|0:404 , 2|2:5 , 0|1:31 , 1|0:51, 0
0|0:404
表示0|0
的计数是404
,依此类推。我只想提取0|0
、1|0
、0|1
和1:1
的值--输出应该是:
chr22, Position, A ,B, C ,D, E
22 ,16050115, 0|0:404 ,0 ,0 ,0 ,1|1:5
22 ,16050213, 0|0:403, 0 ,0, 0, 0
22 ,16050607, 1|0:340, 1|1:3, 0 ,0 ,1|1:3
22 ,16050737, 0|0:402, 0 ,0 ,0, 0
22 ,16050783, 0|0:404 ,0 ,0|1:31 ,1|0:51, 0
我试过grep -e '0|0:' -e '1|1:' -e '0|1:' -e '1|1 /path/file.csv
似乎不起作用。
发布于 2018-12-14 07:15:19
我认为下面的命令行将通过跳过“违犯”行来使用逗号分隔的文件来完成该操作,
grep -v -e ', *[2-9]|' -e '|[2-9]:' file.csv
你可以用一个带有颜色的小文件检查,
grep -v -e ', *[2-9]|' -e '|[2-9]:' file.csv |grep --color '.|.'
哪些行由grep
找到(在前面的命令行中被选项-v
排除在外),
grep -e ', *[2-9]|' -e '|[2-9]:' file.csv |grep --color '.|.'
下面的命令行将使用一个以选项卡分隔的文件执行此操作,
grep -v -e '\t[2-9]|' -e '|[2-9]:' Reddy.tab
或者,如果您希望进行稍微宽松的检查,那么下面的命令行可以工作,
grep -v -e '[2-9]|' -e '|[2-9]:' Reddy.tab file.csv
的评论
我认为下面的命令行将对逗号分隔的文件和选项卡分隔的文件执行OP所需的操作,
sed -e 's/[2-9]|[0-9]:[0-9]*/NA/' -e 's/[0-9]|[2-9]:[0-9]*/NA/' file.csv
发布于 2018-12-14 08:59:04
不确定这种情况是否需要grep
,但是使用perl
,您可以这样做来删除不需要的项:
perl -pe 's/, ?[2-9]\d*\|\d+:\d+//g; s/, ?\d+\|[2-9]\d*:\d+//g' /path/to/file.csv
https://unix.stackexchange.com/questions/487912
复制相似问题