所以我有以下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
我有很多以以下任何一项开头的行:
> S |
> T |
>#D =
> ##
> H |
> Q |
想法是不要复制以前四个数字之一开头的行,
代替H | (在行的开头)按,H |和Q | (在行的开头)由,, Q |
但是现在我需要:
>尽可能快地使用(互联网建议(m)awk比sed更快)
>从.txt.gz文件中读取并将结果保存到.txt.gz文件中,如果可能的话,避免中间的un-zip / re-zip
实际上,有数百个.txt.gz文件以这种方式进行处理(每个文件约1GB)(均位于同一文件夹中).是否有CLI方法可以在所有代码上并行运行代码(因此将为每个核心分配目录中文件的子集)?
-我使用linux –ubuntu
解决方法:
未经测试,但可能与GNU Parallel非常接近.
首先创建输出目录,以免覆盖任何有价值的数据:
mkdir -p output
现在声明一个执行一个文件并将其导出到子进程的函数,以便由GNU Parallel启动的作业可以找到它:
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
标签:awk,grep,ubuntu,sed,linux
来源: https://codeday.me/bug/20191108/2010378.html