每次删除一组变量

法蒂玛

我有一个问题,
实际上我有一个存储数据的文本文件:第一行中有一个数字表示观察次数,第二行中有一个变量表示变量数,第三行中有一个数字表示数据矩阵:每一行代表一个个体,每一列代表一个变量。

例如,我的数据库由3个观察值和4个变量组成,如下所示:

3
4
8    5   6   4   1
7    6   1   5   2
4    8   2   7   2

最后一列代表每个观察的类别

我正在寻找一个给我3个(变量数-1)数据库的程序,第一个由第一个变量和类组成,第二个由前两个变量和类组成,第三个由第一个组成三个变量和类的最后一列,因此我的新数据库必须是跟随其后的文本格式(第一行:观察值的数量,第二行:变量的数量),第一个文本文件将是:

3
1
8    1
7    2
4    2

第二个文本文件将是:

3
2
8    5   1
7    6   2
4    8   2

第三个文本文件将是:

3
3
8    5   6   1
7    6   1   2
4    8   2   2

我有一个程序,每次都会删除一个变量,我想对它进行中间化处理,以便它给出上面解释的内容

该程序是:

#!/bin/sh
#script.sh

#initialisation du compteur
i=0
index=0
nb0=0
nbV=0
tab[1]=0
#fichier="test.txt"
fichier=$1

old_IFS=$IFS
#découper les lignes en fonction du formatage du fichier texte
#pour un autre formatage, modifier l'environnement de la commande read
#en adaptant l'IFS(Internal Field Separator)

while IFS='$\n' read -r ligne; do
#traitement des lignes 1 et 2
if [ "$i" -eq 0 ]; then
echo "nbO : $ligne"
nbO=$ligne
elif [ "$i" -eq 1 ]; then
echo "nbV: $ligne"
nbV=$ligne
while [ "$index" -lt "$nbV" ]
do
echo $nbO >> Output_$(($index+1)).txt
index=$(($index+1))
done
index=0
while [ "$index" -lt "$nbV" ]
do
echo $(($nbV-1)) >> Output_$(($index+1)).txt
index=$(($index+1))
done

else
index=0
IFS=' '
read -a array <<<"$ligne"
#récuperer le nombre de variables à partir 
#de la taille du tableau contenant les variables
nbV=${#array[*]}


while [ "$index" -lt "$nbV" ]
do 

#supprimer l'élement de l'indice index
temp=("${array[@]}")
unset temp[$index]

#echo ${temp[@]} 
#echo ${array[$index]} >> Output_$(($index+1)).txt

echo ${temp[@]} >> Output_$(($index+1)).txt
index=$(($index+1))
done
fi
#incrementation du compteur
i=$(($i+1))
#index=0

done < "$fichier"

IFS=$old_IFS

exit 0

#passer en mode root
#tapez dans la console shell la commande sudo su
#puis entrez votre mot de passe 

#pour créer un script 
#gedit nom_script.sh 

#pour exécuter un script
#donnez les droits d'execution à votre script
#en tapant la commande chmod +x script.sh
#pour executer le script tapez bash script.sh chemin_database

我希望我能解释我想做什么,我将非常感谢任何可以帮助我的人

谢谢

最后一个问题,如果我有矩阵

8    5   6   4   1
7    8   2   7   2
4    3   2   5   2

我怎么能有最大值的总和,这意味着每行的最大值的总和,例如在最大第一行8,最大第二行8和最大最后一行5上方的示例中,我希望结果21为( 8 + 8 + 5),非常感谢

宝马

使用awk

awk 'NR==1{l=$1}
NR==2{t=$1;for (i=1;i<=t;i++) print l RS i> i ".txt"}
NR>2{ for (i=1;i<=t;i++)
         { for (j=1;j<=i;j++0)
              printf $j FS > i ".txt"
           printf $NF RS > i ".txt"
         }
     }' file

说明

  • NR==1{l=$1} 得到第1行并保存到var l
  • NR==2{t=$1;for (i=1;i<=t;i++) print l RS i> i ".txt"} 获得第2行,并将标题打印到每个文件1.txt,2.txt等
  • NR>2 根据您的要求将结果打印到每个文件中。

例如,如果需要在脚本中运行,请接受文件名作为选项。

#!/usr/bin/env bash

    awk 'NR==1{l=$1}
    NR==2{t=$1;for (i=1;i<=t;i++) print l RS i> i ".txt"}
    NR>2{ for (i=1;i<=t;i++)
             { for (j=1;j<=i;j++0)
                  printf $j FS > i ".txt"
               printf $NF RS > i ".txt"
             }
         }' $1

# Put your rest script here.

运行脚本:之后script.sh text.txt,您将直接获得以下文件

结果

$ cat 1.txt
3
1
8 1
7 2
4 2

$ cat 2.txt
3
2
8 5 1
7 6 2
4 8 2

$ cat 3.txt
3
3
8 5 6 1
7 6 1 2
4 8 2 2

$ cat 4.txt
3
4
8 5 6 4 1
7 6 1 5 2
4 8 2 7 2

编辑:对于第二个获取最大值和总和的请求,下面是代码:

源文件:

$ cat file
8    5   6   4   1
7    8   2   7   2
4    3   2   5   2

awk命令:

awk '{for (i=1;i<=NF;i++) max[NR]=max[NR]>$i?max[NR]:$i}END{for (i in max) sum+=max[i];print sum}' file

21

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

删除一组选定的变量

来自分类Dev

一组变量的注释

来自分类Dev

构造一组变量

来自分类Dev

删除上一组中的行

来自分类Dev

一组高度相关的变量

来自分类Dev

每次上传MVC后显示一组图片

来自分类Dev

从目录中的一组文件中删除一组相同的行

来自分类Dev

如何在 Ocaml 中为一组布尔变量生成一组值

来自分类Dev

删除一组浮动按钮中的边距

来自分类Dev

从字符向量中删除一组单词

来自分类Dev

从唯一组中删除单个行-Oracle

来自分类Dev

从多个表中删除同一组值

来自分类Dev

如何从单元阵列中删除特定的一组单元?

来自分类Dev

如何在Swift中删除一组节点?

来自分类Dev

C ++删除一组列表中的重复项

来自分类Dev

如何删除一组元素并留给jQuery或Javascript?

来自分类Dev

删除R中一组行中的某些行

来自分类Dev

删除一组事件侦听器

来自分类Dev

R仅删除一组的重复项

来自分类Dev

删除文本文件中的一组数据

来自分类Dev

从唯一组中删除单行-Oracle

来自分类Dev

从链接中删除一组特定的数据

来自分类Dev

sed:从一组文件中删除路径列表

来自分类Dev

如何从文件中删除一组行?

来自分类Dev

如何删除目录中的一组特定的.png文件?

来自分类Dev

如何使用Objectify .ids()删除一组实体

来自分类Dev

如何仅删除模式的第一组?

来自分类Dev

从 Perl 文件中删除一组行

来自分类Dev

希望从 .txt 文件中删除一组字符