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
相关产品推荐
相关产品推荐

