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

Linux下如何将含两列的文件拆分为两个单列文件

嘿,这个需求用常见的文本处理工具就能轻松搞定,给你几种实用的方法,挑你顺手的用就行:

方法1:用awk(最简洁高效)

awk是处理这类文本拆分的利器,一行命令就能搞定。如果希望每个元素单独占一行:

awk '{for(i=1;i<=NF;i++){if(i%2==1) print $i >> "File1"; else print $i >> "File2"}}' your_input_file

要是想让File1和File2里的内容是空格分隔的一行文本(和你示例里的格式一致),用这个版本:

awk '{
    f1 = ""; f2 = ""
    for(i=1; i<=NF; i++) {
        if(i%2 == 1) f1 = f1 " " $i
        else f2 = f2 " " $i
    }
    print substr(f1, 2) > "File1"  # 去掉开头多余的空格
    print substr(f2, 2) > "File2"
}' your_input_file

解释:NF代表当前行的总字段数,循环遍历每个字段,奇数位的归到File1,偶数位的归到File2。

方法2:用Bash脚本(适合后续扩展逻辑)

如果需要更灵活的处理(比如后续要加过滤条件),写个简单的Bash脚本更方便:

#!/bin/bash
# 把输入文件的内容读入数组
read -ra fields < your_input_file

file1_content=""
file2_content=""

# 遍历数组,按索引拆分
for ((i=0; i<${#fields[@]}; i++)); do
    if ((i % 2 == 0)); then
        file1_content+="${fields[i]} "
    else
        file2_content+="${fields[i]} "
    fi
done

# 去掉末尾多余的空格,写入文件
echo "${file1_content% }" > File1
echo "${file2_content% }" > File2

使用时把脚本保存为split.sh,给执行权限chmod +x split.sh,然后运行./split.sh就行(记得把your_input_file换成你实际的文件名)。

方法3:用sed(单行命令快速实现)

如果你偏爱sed的单行命令风格,也能做到:

# 提取所有第一列内容到File1
sed -E 's/([^ ]+) ([^ ]+)/\1 /g; s/ $//' your_input_file > File1
# 提取所有第二列内容到File2
sed -E 's/([^ ]+) ([^ ]+)/\2 /g; s/ $//' your_input_file > File2

解释:sed通过正则匹配每一对“第一列 第二列”,把它们替换成只保留第一列(或第二列)加空格,最后去掉末尾的多余空格。

内容的提问来源于stack exchange,提问作者Ion Pop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:19:03