Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia在类似awk的方法中如何求目录中某个文件长度的和?_Julia - Fatal编程技术网

Julia在类似awk的方法中如何求目录中某个文件长度的和?

Julia在类似awk的方法中如何求目录中某个文件长度的和?,julia,Julia,我经常用unixshell实用程序处理文本,Julia中有类似的函数吗?julia中的类似过程是否会在awk中编写更少的代码 e、 g.通过linux shell显示目录中文件长度的总和 ls -l /etc/*.conf | awk '{s += $5} END{print s}' 我在朱莉娅做的是 using Glob n=0 for file in glob("*conf","/etc") global n += stat(file).size end println(n) Ju

我经常用unixshell实用程序处理文本,Julia中有类似的函数吗?julia中的类似过程是否会在awk中编写更少的代码

e、 g.通过linux shell显示目录中文件长度的总和

ls -l /etc/*.conf  | awk '{s += $5} END{print s}'
我在朱莉娅做的是

using Glob
n=0
for file in glob("*conf","/etc")
  global n += stat(file).size
end
println(n)

Julia中是否有类似于shell的awk的函数,从
ls-l的输出读取,并对第5列求和?

CSV.jl
可以解析CLI输出,因此您可以使用类似于
awk
的数据。只需确保输出是一致的:更喜欢像
find
这样的工具,而不是
ls

using CSV
# awk like behavior
read2(x; args...) = CSV.read(x; header=false, delim=' ', ignorerepeated=true, args...)
reduce(+, read2(`find /etc -maxdepth 1 -name "*conf" -printf "%s\n"`)[:,1])
如果可能的话,完全在朱莉娅身上工作会好得多:)


请注意,一般来说,如果要将外部程序的文本输出读取为文本,请使用
read(`command in backticks`,String)
。因此,要将ls输出捕获到
文本
,您可以使用

text = read(`ls -l`, String)
这就是CSV.jl在您问题的另一个答案中读取ls输出的方式

那么

lines = strip.(split(text, "\n"))
# skip short lines < length 20, they are not listing lines
answer = sum([parse(Int, split(line, r"\s+")[5]) for line in lines if length(line) > 20])
lines=strip.(拆分(文本“\n”))
#跳过长度小于20的短行,它们不列出行
答案=总和([parse(Int,split(line,r“\s+”)[5]),如果长度(line)>20,则为行中的行)

mapreduce方法可以工作,但是
ls-l/etc/*conf
不可行,因为在Julia中,通配符不可用我正在尝试修改为
读取(`bash-c“ls-l/etc/*conf”`,header=false,delim='',ignorerepeated=true)
,但是如果可能,丢失行时失败,您是否可以保留shell命令,比如
ls-l/etc/*.conf
,而不是使用
find
?我刚刚发现
CSV.read
0.5.22对于read
ls
的结果不容易配置。我刚刚发现CSV.read能够检测列数据类型,对于
11月12日18:22
2018年10月13日
,它将自动检测失败。可能需要将所有列视为字符串,其行为类似于
awk
more。
lines = strip.(split(text, "\n"))
# skip short lines < length 20, they are not listing lines
answer = sum([parse(Int, split(line, r"\s+")[5]) for line in lines if length(line) > 20])