linux怎么复制txt文件中的几行内容,Linux-从巨大的txt.gz文件中选择/复制包含字符串的行的最快方法...

所以我有以下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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值