我有一组数据文件(*.all
)位于不同的文件夹中
Documents/rawdata/Geob1005/1.all, 2.all, 3.all,...,n.all
Documents/rawdata/Geob1006/A.all, B.all, C.all,...,Z.all and so on...
datalist.mb-1
我在每个目录中创建了一个名为的文件,其中列出了*.all
位于同一目录中的所有文件:
/bin/ls -1 *.all | awk '{print $1" 58"}' >datalist.mb-1
所以我得到这个:
Documents/rawdata/Geob1005/datalist.mb-1
Documents/rawdata/Geob1006/datalist.mb-1
and so on...
现在我需要创建一个“主”数据列表,Documents/rawdata/
指出目录中的所有其他数据列表rawdata/
我需要“主”数据列表的结果看起来像这样:
Geob1005/datalist.mb-1 -1
Geob1006/datalist.mb-1 -1
知道如何完成这项任务吗?
提前致谢。
答案1
我最终设法使用 Locate 来完成此操作,实际上我不需要完整路径,但使用 awk 足以仅显示“geo”子目录中的路径。
我是这样做的:
locate ~/Documents/rawdata/*/datalist.mb-1 | awk 'BEGIN {FS="/"} {print $4 "/" $5 " -1"}' > master.txt
答案2
一个非常简单的方法是使用locate
如下命令:
locate Documents/rawdata/Geob*/datalist.mb-1 > master.txt
那是如果完整路径没问题的话。
但是,如果您需要上面描述的仅包含“geo”子目录和文件的格式,则可以使用一个简单的小型 Python 脚本,如下所示:
#!/bin/python
f = open("/path/to/master.txt","r+")
paths = [x.split("/",3)[-1] + " -1" for x in f.readlines()]
f.seek(0)
f.write("".join(paths))
f.truncate()
f.close()
napogeof 答案的略微截断版本:
locate ~/Documents/rawdata/*/datalist.mb-1 | awk -F/ '{print $4 "/" $5 " -1"}' > master.txt
答案3
未经测试
您可以使用 bash 列出单个.txt
文件中的所有文件(只需使用find
命令查找“datalist”文件,然后通过管道传输该文件)。
在 python 中,您可以使用该文件列表(例如datalist_master.txt
),如下所示:
fi = file.open('datalist_master.txt', 'r')
li = fi.readlines()
new_li = []
for element in li:
# get rid of unnecessary path info
element = element.lstrip('Documents/rawdata/')
# add last two digits
element = element + ' ' + element[-2:]
new_li.append(element)
fi.close()
print new_li #or save it somewhere
这在 bash 中当然也是可能的(但我不知道如何)。