我有一个像这样的文件:
chr1 47727 47778 2PJ3LS1:190:C5R7BACXX:3:2202:6839:64070 1 +
chr1 48132 48183 2PJ3LS1:190:C5R7BACXX:3:2109:14612:23955 60 +
chr1 49316 49367 2PJ3LS1:190:C5R7BACXX:3:1107:8369:30676 1 +
chr1 57049 57100 2PJ3LS1:190:C5R7BACXX:3:1205:2852:33393 60 -
chr1 59296 59347 2PJ3LS1:190:C5R7BACXX:3:2306:14160:96792 1 -
chr1 62116 62165 2PJ3LS1:190:C5R7BACXX:3:1203:3949:66047 60 +
chr1 64636 64687 2PJ3LS1:190:C5R7BACXX:3:2112:11315:75619 60 -
chr1 108831 108882 2PJ3LS1:190:C5R7BACXX:3:2211:11748:76230 60 +
chr1 150522 150573 2PJ3LS1:190:C5R7BACXX:3:2108:11820:88376 60 -
chr1 180744 180794 2PJ3LS1:190:C5R7BACXX:3:2115:5327:39987 60 -
我不在乎第4列和第5列。读取巨型文件时是否可以忽略这些列? CSV.read中没有任何东西允许这样做。
答案 0 :(得分:1)
好吧-这不是CSV文件,所以我宁愿直接对其进行解析(虽然效率最高,但在大多数情况下应该足够好了):
df = DataFrame(a=String[], b=Int[], c=Int[])
for line in eachline("filename.txt")
a, b, c = split(line)
push!(df, (String(a), parse(Int, b), parse(Int, c)))
end
编辑:如果您还希望使用第6列(我假设最后一列是Char
):
df = DataFrame(a=String[], b=Int[], c=Int[], d=Char[])
for line in eachline("filename.txt")
a, b, c, _, _, d = split(line)
push!(df, (String(a), parse(Int, b), parse(Int, c)), d[1])
end
答案 1 :(得分:0)
如果您使用的是Linux,则可以使用awk创建仅包含所需列的另一个文件。在朱莉娅:
run(pipeline(`awk '{print $1, $2, $3, $6}' filename.txt`, "otherfile.txt"))
df = CSV.read("otherfile.txt",delim=" ")
我不知道它是否是最有效的,因为它涉及创建中间文件,但是它非常简单,并且允许您在以后需要时保存文件。要删除其中一个或两个,只需运行rm("anyfile.txt)
。