将文件拆分为多个文件(按列)

sha*_*aws 3 bash awk split cut

我有一个文件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
Run Code Online (Sandbox Code Playgroud)

有什么建议么?。

编辑:非常感谢大家。所有答案都是有效的,但我无法对所有答案进行投票。

Vij*_*jay 5

awk '{for(i=1;i<=5;i++){name=FILENAME"_"i;print $i> name}}' your_file
Run Code Online (Sandbox Code Playgroud)

经过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
> 
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 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
Run Code Online (Sandbox Code Playgroud)