处理通过BASH文件交换的数据
首先,我想为我对编码极为基础的知识道歉。然后,我希望我能够正确地表达自己对我的问题的看法。请毫不犹豫地要求进一步澄清或其他任何事情 我在后处理数据时遇到问题 我的目标是重新组合交换的数据 编辑:这是一个.rar文件夹,其中包含我的测试示例,该示例有效,我尝试使其有效。。。(在需要处理数据时,不要害怕) 编辑2:这是我在纸上的期望(在我的rar档案中是我的TestReorder3OK文件夹) 编辑3:最小完整示例 脚本:处理通过BASH文件交换的数据,bash,for-loop,awk,batch-processing,Bash,For Loop,Awk,Batch Processing,首先,我想为我对编码极为基础的知识道歉。然后,我希望我能够正确地表达自己对我的问题的看法。请毫不犹豫地要求进一步澄清或其他任何事情 我在后处理数据时遇到问题 我的目标是重新组合交换的数据 编辑:这是一个.rar文件夹,其中包含我的测试示例,该示例有效,我尝试使其有效。。。(在需要处理数据时,不要害怕) 编辑2:这是我在纸上的期望(在我的rar档案中是我的TestReorder3OK文件夹) 编辑3:最小完整示例 脚本: #!/bin/bash # Definir le nombre de
#!/bin/bash
# Definir le nombre de replica
NP=3
NP1=$[NP-1]
rm torder*
for repl in `seq 0 $NP1`
do
echo $repl
# colle la colonne 2 du fichier .lammps dans un fichier rep_0, puis dans la seconde boucle, la colonne 3 dans rep_1, etc.
awk -v rep=$repl '{r2=rep+2;print $r2}' < log.lammps > rep_$repl
i=0
j=0
# cree une boucle dans la boucle
for a in `cat rep_$repl`
do
i=$[i+1]
j=$[j+3]
head -$i screen.$repl.temp | tail -1 >> torder.$a
head -$j ccccd2_H_${repl}_col.bak2 | tail -3 >> ccccd2_H_${a}_temp_col.bak2
done
done
从第2列开始,该文件包含与以下输入相关联的编号。下面是一个扩展的解释:
第2列有三个值:0、1和1;0与文件ccccd2_H_0_col.bak2
的前三行关联,后三行与1关联,后三行与值1关联
第3列也有三个值:1、0和2;1与文件ccccd2_H_1_col.bak2
的前三行关联,后三行与0关联,后三行与值2关联
第四栏也是这样
现在我想要的是,与0值关联的每一组三行都放入一个文件中。与1值关联的每一组三行放入另一个文件,与2值关联的每一组三行放入最后一个文件
输入:
$ ls
ccccd2_H_0_col.bak2 ccccd2_H_1_col.bak2 ccccd2_H_2_col.bak2 log.lammps
$ cat log.lammps
1 0 1 2
2 1 0 2
3 1 2 0
$ paste ccccd2_H_0_col.bak2 ccccd2_H_1_col.bak2 ccccd2_H_2_col.bak2 | sed 's/\t/\t\t/g'
N a b c N s t u N k l m
C d e f C v w x C n o p
N g h i N y z a N q r s
C j k l C b c d C t u v
N m n o N e f g N w x y
C p q r C h i j C z a b
$ awk -f ../tst.awk log.lammps ccccd2_H_0_col.bak2 ccccd2_H_1_col.bak2 ccccd2_H_2_col.bak2
$ ls
ccccd2_H_0_col.bak2 ccccd2_H_1_col.bak2 ccccd2_H_2_col.bak2 log.lammps
ccccd2_H_0_temp_col ccccd2_H_1_temp_col ccccd2_H_2_temp_col
$ paste ccccd2_H_0_temp_col ccccd2_H_1_temp_col ccccd2_H_2_temp_col | sed 's/\t/\t\t/g'
N a b c N g h i N e f g
C d e f C j k l C h i j
N y z a N m n o N k l m
C b c d C p q r C n o p
N w x y N s t u N q r s
C z a b C v w x C t u v
ccccd2\U H\U 0\U col.bak2
blank line
N a b c
C d e f
N g h i
C j k l
N m n o
C p q r
blank line
N s t u
C v w x
N y z a
C b c d
N e f g
C h i j
blank line
N k l m
C n o p
N q r s
C t u v
N w x y
C z a b
ccccd2\U H\U 1\U col.bak2
blank line
N a b c
C d e f
N g h i
C j k l
N m n o
C p q r
blank line
N s t u
C v w x
N y z a
C b c d
N e f g
C h i j
blank line
N k l m
C n o p
N q r s
C t u v
N w x y
C z a b
ccccd2\U H\U 2\U col.bak2
blank line
N a b c
C d e f
N g h i
C j k l
N m n o
C p q r
blank line
N s t u
C v w x
N y z a
C b c d
N e f g
C h i j
blank line
N k l m
C n o p
N q r s
C t u v
N w x y
C z a b
输出:这些是所需的输出,也是我为简单测试文件获得的输出
ccccd2\U H\U 0\U温度列
blank line
N a b c
C d e f
N y z a
C b c d
N w x y
C z a b
blank line
N g h i
C j k l
N m n o
C p q r
N s t u
C v w x
blank line
N e f g
C h i j
N k l m
C n o p
N q r s
C t u v
ccccd2\U H\U 1\U temp\U col
blank line
N a b c
C d e f
N y z a
C b c d
N w x y
C z a b
blank line
N g h i
C j k l
N m n o
C p q r
N s t u
C v w x
blank line
N e f g
C h i j
N k l m
C n o p
N q r s
C t u v
ccccd2\U H\U 2\U温度列
blank line
N a b c
C d e f
N y z a
C b c d
N w x y
C z a b
blank line
N g h i
C j k l
N m n o
C p q r
N s t u
C v w x
blank line
N e f g
C h i j
N k l m
C n o p
N q r s
C t u v
这在小测试文件(如图所示)上运行良好,但在我的实际系统上却不行。对于我的真实系统,我有包含14行和10001行的log.lammps
文件,以及包含121121行的输入文件(所以10001*块为121行)。它创建的文件比它应该创建的文件大10倍,包含的数据也比它应该创建的文件多
你能告诉我我的问题吗?我认为这与包含一行的文件和包含笛卡尔坐标的文件的行号不同有关,但我真的不理解这种联系,也不知道解决它的方法
提前感谢您……我想我了解您现在正在尝试做什么,这个GNU awk脚本(用于ARGIND、ENDFILE和内置开放文件管理)将完成以下任务:
$ cat ../tst.awk
ARGIND == 1 {
for (inFileNr=2; inFileNr<=NF; inFileNr++) {
outFileNrs[inFileNr,NR] = $inFileNr
}
next
}
ENDFILE { RS = "" }
{ print ORS $0 > ("ccccd2_H_" outFileNrs[ARGIND,FNR] "_temp_col") }
脚本执行:
$ ls
ccccd2_H_0_col.bak2 ccccd2_H_1_col.bak2 ccccd2_H_2_col.bak2 log.lammps
$ cat log.lammps
1 0 1 2
2 1 0 2
3 1 2 0
$ paste ccccd2_H_0_col.bak2 ccccd2_H_1_col.bak2 ccccd2_H_2_col.bak2 | sed 's/\t/\t\t/g'
N a b c N s t u N k l m
C d e f C v w x C n o p
N g h i N y z a N q r s
C j k l C b c d C t u v
N m n o N e f g N w x y
C p q r C h i j C z a b
$ awk -f ../tst.awk log.lammps ccccd2_H_0_col.bak2 ccccd2_H_1_col.bak2 ccccd2_H_2_col.bak2
$ ls
ccccd2_H_0_col.bak2 ccccd2_H_1_col.bak2 ccccd2_H_2_col.bak2 log.lammps
ccccd2_H_0_temp_col ccccd2_H_1_temp_col ccccd2_H_2_temp_col
$ paste ccccd2_H_0_temp_col ccccd2_H_1_temp_col ccccd2_H_2_temp_col | sed 's/\t/\t\t/g'
N a b c N g h i N e f g
C d e f C j k l C h i j
N y z a N m n o N k l m
C b c d C p q r C n o p
N w x y N s t u N q r s
C z a b C v w x C t u v
输出:
$ ls
ccccd2_H_0_col.bak2 ccccd2_H_1_col.bak2 ccccd2_H_2_col.bak2 log.lammps
$ cat log.lammps
1 0 1 2
2 1 0 2
3 1 2 0
$ paste ccccd2_H_0_col.bak2 ccccd2_H_1_col.bak2 ccccd2_H_2_col.bak2 | sed 's/\t/\t\t/g'
N a b c N s t u N k l m
C d e f C v w x C n o p
N g h i N y z a N q r s
C j k l C b c d C t u v
N m n o N e f g N w x y
C p q r C h i j C z a b
$ awk -f ../tst.awk log.lammps ccccd2_H_0_col.bak2 ccccd2_H_1_col.bak2 ccccd2_H_2_col.bak2
$ ls
ccccd2_H_0_col.bak2 ccccd2_H_1_col.bak2 ccccd2_H_2_col.bak2 log.lammps
ccccd2_H_0_temp_col ccccd2_H_1_temp_col ccccd2_H_2_temp_col
$ paste ccccd2_H_0_temp_col ccccd2_H_1_temp_col ccccd2_H_2_temp_col | sed 's/\t/\t\t/g'
N a b c N g h i N e f g
C d e f C j k l C h i j
N y z a N m n o N k l m
C b c d C p q r C n o p
N w x y N s t u N q r s
C z a b C v w x C t u v
请发布一些简洁、可测试的示例输入和预期输出。我在帖子中添加了一个指向谷歌驱动器的链接。我用示例编辑了帖子。我很糟糕,我复制/粘贴了这些名称。。。我按照你的建议扩展了我的解释。我希望它更清楚..正如你所看到的,没有人理解这个问题,你创建了很多没有给出示例的文件。ccccd2_H${a}{u temp_col.bak2,rep_$repl,torder.$a。