Unix终端如何实现txt数据集拆分重组为逐行键值对输出
Unix终端处理该数据集的可行实现方案
以下方案均为Unix环境原生可用方案,无需额外安装依赖:
方案1:awk命令实现(最推荐,性能最优,适配GB级大文件)
所有Unix/Linux/macOS环境默认自带awk,处理结构化文本效率极高,一行命令即可完成需求:awk '{n=split($2, val_arr, ","); for(i=1; i<=n; i++) print $1, val_arr[i]}' 你的输入文件路径命令逻辑:默认按空白分割每行内容,
$1为行首的数值,用split函数将第二列的逗号分隔字符串拆分为数组,循环遍历数组将行首值与每个拆分后的值拼接打印。如果需要将结果保存到新文件,在命令末尾追加> 输出文件路径即可。方案2:Shell内置循环实现(逻辑直观,适合MB级小文件)
完全使用shell内置命令,逻辑直白易修改,适合小体量数据集场景:while read -r key val_str; do IFS=',' read -r -a val_arr <<< "$val_str" for val in "${val_arr[@]}"; do echo "$key $val" done done < 你的输入文件路径命令逻辑:逐行读取文件内容,第一部分读入行首key值,第二部分读入后续整段逗号分隔的字符串,再将字符串按逗号拆分为数组循环输出配对结果。该方案大文件下处理速度远低于awk,不建议处理10万行以上的文件。
方案3:Perl一行命令实现(性能接近awk,适合熟悉Perl语法的场景)
多数Unix环境默认预装Perl,也可一行完成处理:perl -ane '$k=shift @F; print "$k $_\n" for split /,/, join "", @F' 你的输入文件路径命令逻辑:
-a参数自动将每行按空白分割存入@F数组,取出第一个元素作为key,剩余内容拼接后按逗号拆分,循环输出配对结果。
注:以上命令均自动适配行首值与后续内容之间的多空格、制表符分隔场景,无需额外调整分隔符参数。
内容的提问来源于stack exchange,提问作者roger montez
相关产品推荐
相关产品推荐

