Bash技巧:如何将一列每行内容置于另一列同行内容下方?
解决方案
这里提供几个Bash环境下可行的命令行方案,帮你完成格式转换:
方法1:使用awk(推荐,简洁直观)
awk可直接按行处理字段,逻辑清晰:
awk 'NR==1{print $1} NR>1{print $1; print $2}' input.txt > output.txt
解释:
NR==1匹配第一行,只打印第一个字段Col1NR>1匹配后续所有行,依次打印每行的第一个和第二个字段,自动换行
方法2:使用sed
通过文本替换实现转换:
sed -e '1s/ .*//' -e '2,$s/[[:space:]]\+/\n/' input.txt > output.txt
解释:
1s/ .*//:第一行删除第一个空格及后面的所有内容,只保留Col12,$s/[[:space:]]\+/\n/:从第二行到最后一行,把任意数量的空白字符替换成换行符
方法3:使用cut和cat组合
如果需要分步处理,可以拆分列后合并:
# 提取第一列(含标题) cut -d' ' -f1 input.txt > temp_col1.txt # 提取第二列(跳过标题行) cut -d' ' -f2 input.txt | tail -n +2 > temp_col2.txt # 合并两个文件 cat temp_col1.txt temp_col2.txt > output.txt # 清理临时文件(可选) rm temp_col1.txt temp_col2.txt
解释:
cut命令按空格分隔提取列,tail -n +2跳过第二列的标题行- 最后用
cat合并两部分内容得到目标格式
内容的提问来源于stack exchange,提问作者Riksal96
相关产品推荐
相关产品推荐

