我想将一个3列的文本文件转换为三个单独的文件,每个文件各占一行。 换句话说,拿这个文件:
in_file中
1 22 0.8
4 21 0.73
3 30 1.56
5 12 0.92
并生成以下3个文件:
out_file1
1 4 3 5
out_file2
22 21 30 12
out_file3
0.8 0.73 1.56 0.92
我尝试使用cut来做到这一点:
cut -d' ' -f1 in_file | tr -s '\n' '\t' >> out_file1
cut -d' ' -f2 in_file | tr -s '\n' '\t' >> out_file2
cut -d' ' -f3 in_file | tr -s '\n' '\t' >> out_file3
然而,我得到的是:
out_file1
1 4 3 5
out_file2
22 21 30 12
out_file3
0.8
0.73
1.56
0.92
我无法弄清楚为什么它适用于前两列,而不是第三列。
感谢任何帮助!
答案 0 :(得分:0)
如果awk可用,速度会快一点
awk '{ for( i=1; i<=NF; i++) printf( "%s ", $i) > ("file" i)}' YourFile
请注意:
- >
而不是>>
因为awk仅在文件打开时评估重定向(所以创建而不是在这种情况下添加)
对于您的剪切问题,是列
之间的分隔符总是1个空格字符答案 1 :(得分:0)
您的问题很可能是您输入的文字标签而不是\t
的分隔符,这是一个执行所有三个文件的循环:
for i in {1..3}; do
cut -d$'\t' "-f${i}" in_file | column >> "outfile_${i}.txt"
done
这里我们循环一个{1..3}
的序列,使用特殊语法将分隔符设置为tab:-d$'\t'
,将数据传递给column
,这会自动排列值并附加到正确的文件。