我有以下Haskell代码,实现了"cat"unix命令行实用程序的简单版本.在400MB文件上以"时间"测试性能,速度大约慢3倍.(我用来测试它的确切脚本在代码下面).
我的问题是:
关于问题2和3:我使用了GHC -prof,然后使用+ RTS -p运行,但我发现这里的输出有点无法提供信息.
来源(Main.hs)
module Main where
import System.IO
import System.Environment
import Data.ByteString as BS
import Control.Monad
-- Copied from cat source code
bufsize = 1024*128
go handle buf = do
hPut stdout buf
eof <- hIsEOF handle
unless eof $ do
buf <- hGetSome handle bufsize
go handle buf
main = do
file <- fmap Prelude.head getArgs
handle <- openFile file ReadMode
buf <- hGetSome handle bufsize
hSetBuffering stdin $ BlockBuffering (Just bufsize) …Run Code Online (Sandbox Code Playgroud) 我无法将两个avi视频合并在一起.谷歌充满了以下例子:
cat file1.avi file2.avi file3.avi > video_draft.avi
after appending the data together using cat above, you need to re-index the draft movie like this:
mencoder video_draft.avi -o video_final.avi -forceidx -ovc copy -oac copy
Now you're video_final.avi file will be right to go.
Run Code Online (Sandbox Code Playgroud)
但它对我不起作用,第一个视频被转换,就是这样.
我在OSX(unix)环境中编写shell脚本.我有一个名为test.properties以下内容的文件:
cat test.properties 得到以下输出:
//This file is intended for
//blah blah purposes
123
Run Code Online (Sandbox Code Playgroud)
使用cat命令,我怎样才能获得文件的最后一行?
如何在没有换行符的情况下将字符串添加到文件末尾?
例如,如果我使用>>它将添加到文件的末尾与换行符:
cat list.txt
yourText1
root@host-37:/# echo yourText2 >> list.txt
root@host-37:/# cat list.txt
yourText1
yourText2
Run Code Online (Sandbox Code Playgroud)
我想在yourText1之后添加yourText2
root@host-37:/# cat list.txt
yourText1yourText2
Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法将unix文本文件连接在一起比运行更快file1?
这是我面临的问题.我正在处理一个大小为100G的文本文件.我试图通过将文件分成数百个较小的文件并并行处理来改善运行时.最后,我按顺序将生成的文件重新组合在一起.文件读/写时间本身需要数小时.我想找到一种方法来改善以下方面:
cat file1 file2 file3 ... fileN >> newBigFile
Run Code Online (Sandbox Code Playgroud)
这需要将磁盘空间加倍,因为fileN...... newBigFile占用100G,然后file1需要另外100Gb,然后fileN...... file1被删除
数据已经在fileN...中cat >>,file1当我真正需要的是数百个文件重新出现为1个文件时,会产生读写时间......
如果我进入
print(cat(""))
Run Code Online (Sandbox Code Playgroud)
我明白了
NULL
Run Code Online (Sandbox Code Playgroud)
我想用来cat()打印R脚本的进度,但我不明白为什么它会NULL在我所有连接字符串的末尾返回,更重要的是,如何让它停止?
这有点臭虫,但可能有人可以解释它:
以下脚本不起作用,输出如下:
#!/bin/bash
GLOBAL_VAR="OLD"
myfunc() {
echo "func before set> $GLOBAL_VAR"
GLOBAL_VAR="NEW"
echo "func after set> $GLOBAL_VAR"
}
myfunc | cat
echo "final value> $GLOBAL_VAR"
Run Code Online (Sandbox Code Playgroud)
输出:
func before set> OLD
func after set> NEW
final value> OLD
Run Code Online (Sandbox Code Playgroud)
现在,只需脱掉| cat它就行了!
#!/bin/bash
GLOBAL_VAR="OLD"
myfunc() {
echo "func before set> $GLOBAL_VAR"
GLOBAL_VAR="NEW"
echo "func after set> $GLOBAL_VAR"
}
myfunc
echo "final value> $GLOBAL_VAR"
Run Code Online (Sandbox Code Playgroud)
输出:
func before set> OLD
func after set> NEW
final value> NEW
Run Code Online (Sandbox Code Playgroud) 我有一个文本文件infile.txt:
abc what's the foo bar.
foobar hello world, hhaha cluster spatio something something.
xyz trying to do this in parallel
kmeans you're mean, who's mean?
Run Code Online (Sandbox Code Playgroud)
文件中的每一行都将通过此perl命令处理到out.txt中
`cat infile.txt | perl dosomething > out.txt`
Run Code Online (Sandbox Code Playgroud)
想象一下,如果文本文件是100,000,000行.我想并行化bash命令,所以我尝试了这样的事情:
$ mkdir splitfiles
$ mkdir splitfiles_processed
$ cd splitfiles
$ split -n3 ../infile.txt
$ for i in $(ls); do "cat $i | perl dosomething > ../splitfiles_processed/$i &"; done
$ wait
$ cd ../splitfiles_processed
$ cat * > ../infile_processed.txt
Run Code Online (Sandbox Code Playgroud)
但是,有一种不那么冗长的方式来做同样的事情吗?
我有一个tar包含几个文本文件的存档.我想编写一个脚本来显示(stdout)文件的内容,而不将其提取到当前目录.
其实我想做同样的事情:
tar tf myArchive.tar folder/someFile.txt
cat folder/someFile.txt
rm -R folder
Run Code Online (Sandbox Code Playgroud)
但没有rm......
我试过这种方式,但它不起作用:
tar tf myArchive.tar folder/someFile.txt | cat
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个包含这样的文本文件:
abc 123, comma
the quick brown fox
jumped over the lazy dog
comma, comma
Run Code Online (Sandbox Code Playgroud)
我写了一个剧本
for i in `cat file`
do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
由于某种原因,脚本的输出不会逐行输出文件,而是在逗号和换行符处将其分开.为什么猫或"为了等待cat xyz"这样做,我怎么能不这样做呢?我知道我可以使用
while read line
do
blah balh blah
done < file
Run Code Online (Sandbox Code Playgroud)
但我想知道为什么cat或"for blah in"这样做是为了进一步理解unix命令.Cat的手册页对我没有帮助,并且在bash手册中查找或循环没有产生任何答案(http://www.gnu.org/software/bash/manual/bashref.html).在此先感谢您的帮助.