我似乎找不到这个简单任务的awk解决方案.我可以根据一个匹配字段($ 1)轻松地将一列($ 3)与:
awk -F, '{array[$1]+=$3} END { for (i in array) {print i"," array[i]}}' datas.csv
Run Code Online (Sandbox Code Playgroud)
现在,我该如何基于两个字段来做到这一点?让我们说$ 1和$ 2?这是一个示例数据:
P1,gram,10
P1,tree,12
P1,gram,34
P2,gram,23
...
Run Code Online (Sandbox Code Playgroud)
如果第一个和第二个字段匹配,我只需要对第3列求和.
Thanx任何帮助!
我一直在阅读有关在JS中进行OOP的不同方法.
Douglas Crockford有一种有趣的方法,他似乎根本不使用授权.相反,对我而言,他似乎纯粹利用对象连接作为他的继承机制,但是我很难说出最新情况,我希望有人可以提供帮助.
以下是克罗克福德在其中一次会谈中提出的一个例子.
function constructor(spec) {
let {member} = spec,
{other} = other_constructor(spec),
method = function () {
// accesses member, other, method, spec
};
return Object.freeze({
method,
other
});
}
Run Code Online (Sandbox Code Playgroud)
以下是一个要点的例子
function dog(spec) {
var { name, breed } = spec,
{ say } = talker({ name }),
bark = function () {
if ( breed === 'chiuaua' ) {
say( 'Yiff!' );
} else if ( breed === 'labrador' ) {
say('Rwoooooffff!');
}
};
return …Run Code Online (Sandbox Code Playgroud) 在Clojure中,方括号是定义向量的简写:
user=> (vector 'a 'b 'c)
[a b c]
user=> ['a 'b 'c]
[a b c]
Run Code Online (Sandbox Code Playgroud)
该文档页面的vector讲的很长的路要走,并确定载体的一小段路.
然而,在defn和doseq那里似乎存在差异.
user=> (doseq [x (range 1 4)] (printf "%d\n" x))
1
2
3
nil
user=> (doseq (vector 'x (range 1 4)) (printf "%d\n" x))
IllegalArgumentException doseq requires a vector for its binding in user:1 clojure.core/doseq (core.clj:2935)
Run Code Online (Sandbox Code Playgroud)
这种差异的原因是什么?方括号在读者中是否具有特殊地位,或者它们是否具有特定的形式?
原始数据如下所示:
YAPM1,20100901,23:36:01.563,Quote,,,,,,,4563,,,,,,
YAPM1,20100901,23:36:03.745,Quote,,,,,4537,,,,,,,,
Run Code Online (Sandbox Code Playgroud)
第一行有额外的空列.我解析数据如下:
val tokens = List.fromString(line, ',')
Run Code Online (Sandbox Code Playgroud)
结果:
List(YAPM1, 20100901, 23:36:01.563, Quote, 4563)
List(YAPM1, 20100901, 23:36:03.745, Quote, 4537)
Run Code Online (Sandbox Code Playgroud)
目前无法使用生成的列表来推断哪些行具有额外的列.我该怎么做呢?
我有一个字符串,使用了一些数据','.现在我想计算该','字符串中的出现次数.我试过了:
var match = string.match('/[,]/i');
Run Code Online (Sandbox Code Playgroud)
但这给了我null如果我试图获得匹配数组的长度.有任何想法吗?
我是JavaScript的初学者所以请耐心等待=)
我正在尝试编写一个计算它被调用次数的函数.到目前为止我所拥有的是一个具有明确增加的计数器的函数:
var increment = function () {
var i = 0;
this.inc = function () {i += 1;};
this.get = function () {return i;};
};
var ob = new increment();
ob.inc();
ob.inc();
alert(ob.get());
Run Code Online (Sandbox Code Playgroud)
但我想知道如何只调用ob();,所以该函数可以自动增加对自己的调用.这是可能的,如果是的话,怎么样?
我正在使用Python的requests库访问web服务,端点正在返回一个(非常大的)CSV文件,然后我想将其流式传输到数据库中.代码如下所示:
response = requests.get(url, auth=auth, stream=True)
if response.status_code == 200:
stream_csv_into_database(response)
Run Code Online (Sandbox Code Playgroud)
现在,当数据库是MongoDB数据库时,加载完美地使用DictReader:
def stream_csv_into_database(response):
.
.
.
for record in csv.DictReader(response.iter_lines(), delimiter='\t'):
product_count += 1
product = {k:v for (k,v) in record.iteritems() if v}
product['_id'] = product_count
collection.insert(product)
Run Code Online (Sandbox Code Playgroud)
但是,我正在从MongoDB切换到Amazon RedShift,我已经可以使用它进行访问了psycopg2.我可以打开连接并简单地进行简单查询,但我想要做的是使用来自webservice的流式响应并使用psycopg2 copy_expert来加载RedShift表.这是我到目前为止尝试的内容:
def stream_csv_into_database(response, campaign, config):
print 'Loading product feed for {0}'.format(campaign)
conn = new_redshift_connection(config) # My own helper, works fine.
table = 'products.' + campaign
cur = conn.cursor()
reader = response.iter_lines()
# Error …Run Code Online (Sandbox Code Playgroud) 编者注:这个问题在Rust 1.0之前被问过,并且从那时起一些语法发生了变化,但基本概念仍然存在.一些答案已针对Rust 1.0语法进行了更新.
我是Rust的新手,并尝试使用在JavaScript,Python等方面无关紧要的闭包,但我遇到Rust的终身问题.我理解错误信息,但它让我相信我想要做的事情在Rust中非常难.
我只是想创建一个函数数组a,这样
a[0] 是返回0的函数a[1] 是返回1的函数a[9] 是函数返回9我试过了:
fn main() {
let a : [||->uint, ..10];
for i in range(0u, 10) {
a[i] = ||{i};
}
println!("{} {} {}", a[1](), a[5](), a[9]())
}
Run Code Online (Sandbox Code Playgroud)
但我得到了一生的错误.a由于生命周期不能超过while块,所以报告的错误是"无法推断由于要求冲突的适当生命周期",因此闭包不能超过它们的堆栈帧,这当然是因为我正在调用它们println!.
我敢肯定必须有一种方法来构建这个函数数组,但是如何?
在Ruby中,类只是类的对象Class.所以我们可以通过发送消息new来实例化新类Class,如下所示:
Rat = Class.new do
def initialize(name); @name = name; end
def squeak; "#{@name} says squeak"; end
end
marshi = Rat.new 'Marshmallow'
puts marshi.squeak
Run Code Online (Sandbox Code Playgroud)
我认为,这完全有效,好像我用第一行替换了第一行
class Rat
Run Code Online (Sandbox Code Playgroud)
这是一个类表达式(根据Matz的书中的7.1.1节).所以看起来类表达只不过是语法糖.如果是这种情况,这个事实在哪里得到权威表达?它是在Ruby源代码中吗?文档?
如果没有,那么类表达式与Class.new直接调用有什么不同吗?我已经能够确定的是,类表达式返回最后一个表达式(这将是squeak方法)但是使用Class.new和返回新类本身的赋值.但这似乎不是我添加类表达式语法的理由,所以我想我可能会遗漏一些东西.
我在Rust写了一些小脚本.这些可以通过命令来运行
$ rustc dosomething.rs && ./dosomething
Run Code Online (Sandbox Code Playgroud)
这些工作很棒.但是,我遇到了需要使用正则表达式的情况.我开始的脚本extern crate regex;它看来,这意味着我需要运行通过货物我的脚本.我设法使用正则表达式运行这个小脚本的唯一方法是强制我的脚本进入自己的目录,具有以下结构:
.
??? Cargo.toml
??? src
??? main.rs
Run Code Online (Sandbox Code Playgroud)
我装了Cargo.toml有
[package]
name = "wordcount"
version = "0.0.1"
[dependencies]
regex = "0.1"
Run Code Online (Sandbox Code Playgroud)
并尽职尽责地运行cargo build并获得我正在运行的可执行文件
但是,在计算Cargo工件使用的磁盘空间时,我发现它们由17个文件,21个目录和23兆字节组成.
现在运行大型应用程序时非常好; 我似乎是小型Java应用程序,其中Maven下载了这么多的罐子,23M是微观的.
我只是想知道在Rust中是否没有其他方法可以使用正则表达式编写脚本.(是的,我确实想要正则表达式,因为它易于使用\pL.)
是否内置支持Rust中的正则表达式或某种方式将我的wordcount脚本保存在与其他脚本相同的目录中?是不是有一些类似的-L旗帜呢?