说我有一个下面给出的数据文件。给定的awk command
使用列的第一个值将文件拆分为多个部分,并将其写入文件。
chr pos idx len
2 23 4 4
2 25 7 3
2 29 8 2
2 35 1 5
3 37 2 5
3 39 3 3
3 41 6 3
3 45 5 5
4 25 3 4
4 32 6 3
4 38 5 4
awk 'BEGIN {FS=OFS="\t"} {print > "file_"$1".txt"}' write_multiprocessData.txt
上面的代码会将文件拆分为file_2.txt,file_3.txt ....因为,awk首先将文件加载到内存中。我宁愿写一个python脚本来调用awk
并拆分文件并直接将其加载到linux内存中(并将数据的唯一变量名称作为file_1,file_2)。
这可能吗?如果没有,我可以尝试其他变化。
答案 0 :(得分:0)
这里不需要Awk。
from collections import defaultdict
prefix = defaultdict(list)
with open('Data.txt', 'r') as data:
for line in data:
line = line.rstrip('\r\n')
prefix[line.split()[0]].append(line)
现在你在dict prefix
中将所有行中的所有第一个字段作为键,以及带有该前缀的行列表作为每个键的值。
如果您还希望此时将结果写入文件,这是一个简单的练习。
通常,简单的Awk脚本几乎总是很容易在Python中重新实现。因为Awk非常专门用于一组受限制的任务,所以Python代码通常不那么简洁,但是考虑到Python格言“显式比隐式更好”,这实际上可能是可读性和可维护性的观点。
答案 1 :(得分:0)
我认为你的awk代码有一点bug。如果你想将你的awk代码合并到一个python代码中,组织你要做的所有事情,试试这个:
htmlstring = "<img src='" + serverURL() + "/images/" + arr[i].imagefile + "' height='100'><div>" + arr[i].itemName + "</div><div>" + arr[i].price + "</div><a href='#' class='ui-btn' id='btn" + arr[i].itemID + "'>View Item</a>"; //add a new [Category] button
$("#result").append(htmlstring);
os.system工作得很好,但我不知道它是否过时。无论如何,正如建议的子过程一样:
import os
from numpy import *
os.system("awk '{if(NR>1) print >\"file_\"$1\".txt\"}' test.dat")