You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bash的GNU Parallel与cat时移除多文件扩展名的问题

问题解决:GNU Parallel 仅接收第一列数据的问题

问题根源

你使用的 sed 's/\..*//' 是对整行文本进行全局替换,会把每行中第一个.之后的所有内容(包括逗号和第二列的全部内容)彻底删除。比如原行 file1a.extension.extension,file1b.extension.extension 经过sed处理后,会变成 file1a——逗号和第二列数据完全丢失,导致Parallel只能读取到第一列,第二列自然为空。

解决方案

方案1:用awk分别处理列后传给Parallel

通过awk拆分CSV列,仅对第二列移除扩展名,第一列保留原格式,再将处理后的结果传给Parallel:

cat /home/filepairs.csv | awk -F',' '{print $1 "," gensub(/\..*/, "", 1, $2)}' | parallel --colsep ',' echo column 1 = {1} column 2 = {2}

方案2:用Parallel内置功能处理第二列

直接借助Parallel的内置文本替换能力,对第二列单独做扩展名移除操作,省去额外的sed步骤:

cat /home/filepairs.csv | parallel --colsep ',' echo column 1 = {1} column 2 = '{= s/\..*// =}'

验证输出

执行上述任一命令后,会得到你预期的结果:

column 1 = file1a.extension.extension column 2 = file1b
column 1 = file2a.extension.extension column 2 = file2b

内容的提问来源于stack exchange,提问作者Gabriel G.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:40:24