我有500个名字为fort.1,fort.2 ... fort.500的文件.每个文件包含800个数据,如下所示:
1 0.485
2 0.028
3 0.100
4 0.979
5 0.338
6 0.891
7 0.415
8 0.368
9 0.245
10 0.489
我想从每个文件中获取每行第二列的平均值.换句话说,从所有文件中获取第二列第一行的平均值并存储在"output.file"中.然后得到第二行第二列的平均值并存储在相同的"output.file"中.我尝试使用粘贴命令,但未能得到我想要的.在AWK有什么办法吗?
感谢任何帮助.谢谢
我需要一些帮助才能运行此代码.我从(http://easybioinfo.free.fr/?q=content/amber-trajectory-gromacs-xtc-conversion)获取此代码.我试图将琥珀色轨迹转换为gromacs轨迹.
当我执行此代码时,我得到一些错误.我粘贴此代码下面的错误:
#!/usr/bin/python
#Workflow based on Trajectory Converter - v1.5 by: Justin Lemkul
#completely reimplemented and improved by Peter Schmidtke & Jesus Seco
import sys,os,re,fnmatch
if len(sys.argv)>4 :
f=sys.argv[1]
if not os.path.exists(f):
sys.exit(" ERROR : Something you provided does not exist. Breaking up.\n\nUSAGE : python trajconv_peter.py amberCrd amberTop trajDir trajPattern outPutPrefix\n\n \
Example : python amber2xtc.py mdcrd.crd mdcrd.top md *.x.gz md_gromacs\n")
else :
sys.exit(" \n USAGE : python amber2xtc.py AMBERCRD AMBERTOP TRAJDIR TRAJPATTERN OUTPUTPREFIX\n\
Example : python amber2xtc.py …
Run Code Online (Sandbox Code Playgroud) 我想按顺序获取文件名列表.就像是
files-1-loop-21
files-1-loop-22
files-1-loop-23
files-1-loop-24
files-2-loop-21
files-2-loop-22
files-2-loop-23
.
.
.
and so on
Run Code Online (Sandbox Code Playgroud)
至于测试,我编写了如下python代码:
代码sample_1:
for md in range(1,5):
for pico in range(21,25):
print md, pico
Run Code Online (Sandbox Code Playgroud)
它给了我一对数字,如:
`1 21
1 22
1 23
1 24
2 21
2 22
2 23
2 24
3 21
3 22
3 23
3 24
4 21
4 22
4 23
4 24
Run Code Online (Sandbox Code Playgroud)
`
如果我使用:
代码sample_2:
for md in range(1,5):
for pico in range(21,25):
print "file-md-loop-pico"
Run Code Online (Sandbox Code Playgroud)
我明白了
files-md-loop-pico
files-md-loop-pico
files-md-loop-pico
files-md-loop-pico
files-md-loop-pico
files-md-loop-pico …
Run Code Online (Sandbox Code Playgroud) 我有40,000个数据文件.每个文件在单列中包含1445行浮点数.现在我需要以不同的顺序重新排列数据.
需要收集每个数据文件中的第一个数字并将其转储到新文件中(比如说abc1.dat).此特定文件(abc1.dat)将包含40,000个数字.
并且需要提取每个数据文件中的第二个数字并将其转储到另一个新文件中(假设为abc2.dat).这个新文件也将包含40,000个数字.但每个数据文件只有第二个数字.
在这个操作结束时,我应该有1445个文件(abc1.dat,abc2.dat,... abc40000.dat),每个文件包含40,000个数据.
如何实现这一目标?(使用Linux Ubuntu 11.10 - 64位)
感谢任何帮助.提前谢谢.
在bash中,我可以编写一个简单的脚本,如下所示; 在我使用环境变量"fileplace"定义文件的路径时读取文件夹中文件的内容
#!/bin/bash
fileplace="/home/vijay/data1/process-folder1/"
cat $file/file1.dat
Run Code Online (Sandbox Code Playgroud)
我希望通过使用变量定义路径,在FORTRAN 90中实现相同的功能.我想这样做是因为我的文件夹位置路径很长,我想避免在FORTRAN 90中对长行使用&和+符号.
我曾尝试编写如下的简单FORTRAN 90代码进行测试.
program test_read
implicit none
open (unit=10, status="old",file="/home/vijay/data1/process-folder1/file1.dat")
read(10,*) junk
write(*,*) junk
stop
end
Run Code Online (Sandbox Code Playgroud)
如果我可以避免在FORTRAN代码中使用长路径(/ home/vijay/data1/process-folder1 /).有没有可能实现这个目标?如果是,任何人都可以帮助纠正这个FORTRAN代码?提前感谢任何帮助.
谢谢
维杰
我想打开10,000个文件名从abc25000
until 开始的文件abc35000
,并将一些信息复制到每个文件中.我写的代码如下:
PROGRAM puppy
IMPLICIT NONE
integer :: i
CHARACTER(len=3) :: n1
CHARACTER(len=5) :: cnum
CHARACTER(len=8) :: n2
loop1: do i = 25000 ,35000 !in one frame
n1='abc'
write(cnum,'(i5)') i
n2=n1//cnum
print*, n2
open(unit=i ,file=n2)
enddo loop1
Run Code Online (Sandbox Code Playgroud)
结束
这段代码应该从abc24000
直到开始生成文件,abc35000
但它停止大约一半的说法
在test test-openFile.f90的第17行(unit = 26021,file ='')
Fortran运行时错误:打开的文件太多
我需要做些什么来修复上面的代码?
我有一个包含两列的数据文件.我想找出第二列的最大数据值,并将第二列的每个条目除以最大值.(所以我将在第二列中获得所有条目<= 1.00).
我尝试使用以下命令:
awk 'BEGIN {max = 0} {if ($2>max) max=$2} {print ($2/max)}' angleOut.dat
Run Code Online (Sandbox Code Playgroud)
但我得到如下错误信息.
awk: (FILENAME=angleOut.dat FNR=1) fatal: division by zero attempted
Run Code Online (Sandbox Code Playgroud)
注意:第二列中有一些数据是零值.但是当零值除以最大值时,我应该得到零,但我得到如上所述的错误.
我能得到任何帮助吗?
提前谢谢了.
我正在使用Fortran对大量数据集进行计算,这些数据集被分成许多文件.文件名是:
maltoLyo12per-reimage-set1.traj
maltoLyo12per-reimage-set2.traj
maltoLyo12per-reimage-set3.traj
Run Code Online (Sandbox Code Playgroud)
我编写的代码用于计算如下:
fileLoop: do j = 31, 34
OPEN(unit=31,status='old',file=fileplace//'maltoLyo12per-reimage-set1.traj')
OPEN(unit=32,status='old',file=fileplace//'maltoLyo12per-reimage-set2.traj')
OPEN(unit=33,status='old',file=fileplace//'maltoLyo12per-reimage-set3.traj')
OPEN(unit=34,status='old',file=fileplace//'maltoLyo12per-reimage-set4.traj')
... operation....
close (j)
end do fileLoop
Run Code Online (Sandbox Code Playgroud)
在运行期间,我希望代码一次打开每个文件,并在完成计算后关闭它们.但是上面的代码将立即打开所有文件,并在完成计算后逐个关闭它们.
所以我试着改变代码,如下所示:
fileLoop: do j = 31, 34
OPEN(unit=j,status='old',file=fileplace//'maltoLyo12per-reimage-set1.traj')
close (j)
end do fileLoop
Run Code Online (Sandbox Code Playgroud)
但在这里我遇到了文件名的问题.每次循环运行时,文件名都不会因文件名中的短语"set1"而改变.我希望文件名中的数字更改为set1,set2,set3等,随后文件单元号为31,32,33,34等.
我有数百个文件名为fort.1,fort.2,fort.3等文件,直到fort.5000.我想要的是打开每个文件并操作该文件并关闭.然后继续下一个文件.我想在Fortran 90中这样做.
我已经浏览但无法得到我想要的东西.我看到一个开放的线程,但它对我没什么帮助.
我试着写'
program openFile
IMPLICIT none
INTEGER(I-N), REAL*8(A-H,O-Z)
real,dimension(2000) :: angle
CHARACTER(len=10) FN
integer::I, k
integer,parameter :: N=102
DO I=101,N
!WRITE(FN,10) I
!WRITE(6,*) FN
OPEN(1,FILE=FN)
do k=1,200
read(1,'(F8.3)') angle(k)
print*,
end do
CLOSE(1)
enddo
10 FORMAT(5Hfort.I3)
STOP
END
Run Code Online (Sandbox Code Playgroud)
`但似乎它不起作用.这可能是我得到一些帮助吗?提前致谢.
我想打开多个文件,文件名改变不多.
例如,我想打开
abc.001.xyz.010.trj
Run Code Online (Sandbox Code Playgroud)
对数据文件进行一些操作后,我想将结果保存到文件中:
out.abc.001.xyz.010.trj.dat
Run Code Online (Sandbox Code Playgroud)
这个过程应该持续到10个文件.
我知道如何打开这个文件
readfile = abc.001.xyz.010.trj
f = open(readfile, "r")
Run Code Online (Sandbox Code Playgroud)
后来我试着写入文件
outfile = out.readfile
f = open(outfile, "w")
Run Code Online (Sandbox Code Playgroud)
但我失败了.期望得到输出文件
out.abc.001.xyz.010.trj.dat
Run Code Online (Sandbox Code Playgroud)
对于每个循环.
谢谢.