我有一个文件data.txt,其中有200列和行(方形矩阵)。所以,我一直在尝试将我的文件分成200个文件,每个文件都有一个来自大数据文件的列。这些我的两次尝试使用cut和awk,但我不明白为什么不工作。
NM=`awk 'NR==1{print NF-2}' < file.txt`
echo $NM
for (( i=1; i = $NM; i++ ))
do
echo $i
cut -f ${i} file.txt > tmpgrid_0${i}.dat
#awk '{print '$i'}' file.txt > tmpgrid_0${i}.dat
done
有什么建议吗?。
编辑:非常感谢你们所有人。所有答案都有效,但我不能投票给所有答案。答案 0 :(得分:5)
awk '{for(i=1;i<=5;i++){name=FILENAME"_"i;print $i> name}}' your_file
测试了5列:
> cat temp
PHE 5 2 4 6
PHE 5 4 6 4
PHE 5 4 2 8
TRP 7 5 5 9
TRP 7 5 7 1
TRP 7 5 7 3
TYR 2 4 4 4
TYR 2 4 4 0
TYR 2 4 5 3
> nawk '{for(i=1;i<=5;i++){name=FILENAME"_"i;print $i> name}}' temp
> ls -1 temp_*
temp_1
temp_2
temp_3
temp_4
temp_5
> cat temp_1
PHE
PHE
PHE
TRP
TRP
TRP
TYR
TYR
TYR
>
答案 1 :(得分:2)
总结一下我的评论,我建议像这样(未经测试,因为我没有样本文件):
NM=$(awk 'NR==1{print NF-2}' file.txt)
echo $NM
for (( i=1; i <= $NM; i++ ))
do
echo $i
awk '{print $'$i'}' file.txt > tmpgrid_0${i}.dat
done
答案 2 :(得分:0)
使用tr
和split
< file.txt tr ' ' '\n' | split -nr/200
这假设文件是以空格分隔的,但可以根据任何分隔符调整tr命令。基本上这会将每个条目放在自己的行上,然后使用split的循环版本将每个第200行写入同一个文件。
paste -d' ' x* | cmp - file.txt
如果split正在编写带有x
前缀的文件,验证它是否有效。
我在Coreutils邮件列表上从Reuti获得了这个解决方案。