gnu 平行管道 sed 删除反引号
gnu parallel pipe sed remove backtick symbol
例如。我有一个test.sql
cat test.sql
INSERT INTO `t_zydx` VALUES 77.2148,
我想将 ` 替换为空
使用 sed
效果很好
sed s/\`//g test.sql
INSERT INTO t_zydx VALUES 77.2148,
但是当我使用平行管时
cat test.sql | parallel --pipe sed s/\`//g
显示
/bin/bash: -c: line 0: unexpected EOF while looking for matching ``'
/bin/bash: -c: line 1: syntax error: unexpected end of file
您需要引用命令:
cat test.sql | parallel -q --pipe sed s/\`//g
或:
cat test.sql | parallel --pipe sed 's/\`//g'
for example, if i have a sql file like 20GB, does parallel process faster than just using sed
?
可能不会。 --pipe
很慢。它的最大值约为 500 MB/s。但是 --pipepart
每个核心大约 1 GB/s 。因此,在具有超线程 (8 "cores") 的 4 核上,我可以获得 5 GB/s.
这会将 test.sql
的大小除以核心数,并将该大小的整行块传递给 sed
:
parallel --pipepart --block -1 -a test.sql sed 's/\`//g'
GNU Parallel 将缓冲磁盘上的输出,因此这现在可能是限制因素。这或多或少会发生什么:
read test.sql
save processed output to /tmp
read processed output from /tmp
print to stdout
如果您不关心顺序 - 您只想要完整的行,那么您可以使用 --line-buffer
来避免中间的两个 save
和 read
(从版本 20170822 开始) :
# Chop input into one chunk per core
# process chunk
parallel --pipepart --block -1 -a test.sql --line-buffer sed 's/\`//g'
这样可以避免临时存储 20 GB,但只从磁盘读取 20 GB 一次并在标准输出上写入 20 GB。
例如。我有一个test.sql
cat test.sql
INSERT INTO `t_zydx` VALUES 77.2148,
我想将 ` 替换为空
使用 sed
效果很好
sed s/\`//g test.sql
INSERT INTO t_zydx VALUES 77.2148,
但是当我使用平行管时
cat test.sql | parallel --pipe sed s/\`//g
显示
/bin/bash: -c: line 0: unexpected EOF while looking for matching ``'
/bin/bash: -c: line 1: syntax error: unexpected end of file
您需要引用命令:
cat test.sql | parallel -q --pipe sed s/\`//g
或:
cat test.sql | parallel --pipe sed 's/\`//g'
for example, if i have a sql file like 20GB, does parallel process faster than just using
sed
?
可能不会。 --pipe
很慢。它的最大值约为 500 MB/s。但是 --pipepart
每个核心大约 1 GB/s 。因此,在具有超线程 (8 "cores") 的 4 核上,我可以获得 5 GB/s.
这会将 test.sql
的大小除以核心数,并将该大小的整行块传递给 sed
:
parallel --pipepart --block -1 -a test.sql sed 's/\`//g'
GNU Parallel 将缓冲磁盘上的输出,因此这现在可能是限制因素。这或多或少会发生什么:
read test.sql
save processed output to /tmp
read processed output from /tmp
print to stdout
如果您不关心顺序 - 您只想要完整的行,那么您可以使用 --line-buffer
来避免中间的两个 save
和 read
(从版本 20170822 开始) :
# Chop input into one chunk per core
# process chunk
parallel --pipepart --block -1 -a test.sql --line-buffer sed 's/\`//g'
这样可以避免临时存储 20 GB,但只从磁盘读取 20 GB 一次并在标准输出上写入 20 GB。