所以我有以下内容sed
一班轮:
sed -e '/^S|/d' -e '/^T|/d' -e '/^#D=/d' -e '/^##/d' -e 's/H|/,H|/g' -e 's/Q|/,,Q|/g' -e '1 i\,,,' sample_1.txt > sample_2.txt
我有很多行以以下任一开头:
这个想法是not复制以前四个之一开头的行并
取代H|
(在行的开头)由,H|
and Q|
(在行的开头)由,,Q|
但现在我需要:
- 使用尽可能最快的方法(互联网表明 (m)awk 比 sed 更快)
- 从 .txt.gz 文件读取并将结果保存在 .txt.gz 文件中,如果可能的话,避免中间的解压缩/重新压缩
事实上,有数百个 .txt.gz 文件,每个大约 1GB,需要以这种方式处理(都在同一个文件夹中)。是否有一种 CLI 方法可以在所有内核上并行运行代码(这样每个内核都会被分配目录中文件的子集)?
--我使用linux --ubuntu
未经测试,但可能与此非常接近GNU 并行.
首先创建输出目录,以免覆盖任何有价值的数据:
mkdir -p output
现在声明一个函数,该函数执行一个文件并将其导出到子进程,以便作业由GNU 并行可以找到它:
doit(){
echo Processing $1
gzcat "$1" | awk '
/^[ST]\|/ || /^#D=/ || /^##/ {next} # ignore lines starting S|, T| etc
/^H\|/ {print ","} # prefix "H|" with ","
/^Q\|/ {print ",,"} # prefix "Q|" with ",,"
1 # print all other lines
' | gzip > output/"$1"
}
export -f doit
现在处理所有txt.gz
并行文件并显示进度条:
parallel --bar doit ::: *txt.gz
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)