在Bash中如何将多列文本转换为单列长文本?
Bash多列文本转单列实现方法
以下方法适配你给出的键值对格式(单空格分隔键值,双空格分隔不同键值对),按你的需求场景选择即可:
场景1:按列优先输出(和你给出的预期输出完全匹配)
输出顺序为先打印所有行的第一列键值对,再打印所有行的第二列,以此类推,用awk实现最稳定:
awk -F' ' '{ for (col = 1; col <= NF; col++) { col_content[col] = col_content[col] ? col_content[col] "\n" $col : $col } } END { for (i = 1; i <= length(col_content); i++) { print col_content[i] } }' 你的文件路径.txt
鲁棒性优化:如果你的文本列之间的空白不固定(混有制表符、空格数量不一致),可以把命令开头的
-F' '替换为BEGIN{FPAT = "[^[:space:]]+[[:space:]]+[^[:space:]]+"},自动识别每个二元键值对,不需要固定分隔符。
场景2:按行优先输出
如果不需要按列排序,只要把所有键值对拆为每行一个,顺序和原文本从左到右、从上到下的出现顺序一致,可以用更简单的命令:
方法1:xargs实现
xargs -n 2 < 你的文件路径.txt
-n 2参数指定每次读取2个空白分隔的参数输出为一行,刚好适配二元键值对结构。
方法2:sed实现
sed 's/ /\n/g' 你的文件路径.txt
直接把所有双空格分隔符替换为换行符,实现拆分。
内容的提问来源于stack exchange,提问作者Kushagra Gupta
相关产品推荐
相关产品推荐

