linux - 如何在 Linux 中创建一个列为降序子目录的 txt 文件?

标签 linux file directory-structure

我的数据遵循以下结构:

../data/study_ID/FF_Number/Exam_Number/date,

其中数据目录包含 176 个参与者的子目录。 ID号代表参与者ID,下面的每个子目录代表一些实验编号。 我想创建一个 txt 文件,每个参与者一行,包含以下列:研究 ID、FF_number、Exam_Number 和日期。

然而,它变得有点复杂,因为我想将参与者分成每 block 约 15-20 ppt 的 block 以进行以下分析。

有什么建议吗? 干杯。

最佳答案

嗯,没人吗?

您应该重定向“find”命令的输出,考虑开关 -type d 和 -maxdepth,并可能使用 sed 解析它,将“/”替换为“空格”。也许管道通过“cut”和“column -t”命令,“sort”和“uniq”会很有用。除 FF 和 ID 外,名称是否包含空格或特殊字符,例如与参与者姓名有关?

应该可以得到一个“一个衬里”和几个管道的TXT。

你应该尝试,并发布你在这方面工作的第一个结果 :)

编辑:好的,我为我创建了一个包含数千个目录和子目录的结构,这些目录和子目录按参与者、考试编号等编号,看起来像这样(也许它与您拥有的不一样,但别担心) .研究编号从 5 到 150,FF 从 45 到 75,日期从 2012_01_00 到 2012_01_30 - 这使得目录总数非常庞大。

/Users/pwadas/bzz/data
/Users/pwadas/bzz/data/study_005
/Users/pwadas/bzz/data/study_005/05_Num
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_00
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_01
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_02
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_03
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_04
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_05
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_06
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_07
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_08
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_09
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_10
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_11
/Users/pwadas/bzz/data/study_005/05_Num/45_Exam/2012_01_12

现在,我想要(引用)“txt 文件,每个参与者一行,以下列:研究 ID、FF_number、Exam_Number 和日期。”

所以我使用下面的一行代码:

find /Users/pwadas/bzz/data -type d | head -n 5000 |cut -d'/' -f5-7  | uniq |while read line; do echo -n "$line: " && ls -d /Users/pwadas/bzz/$line/*Exam/* | perl -0pe 's/.*2012/2012/g;s/\n/ /g' && echo ; done  > out.txt

这是输出(out.txt 的前几行)。行很长,我在输出前 80-90 个字符时将其截断:

dtpwmbp:data pwadas$ cat out.txt |cut -c1-90
data: 
data/study_005: 
data/study_005/05_Num: 2012_01_00 2012_01_01 2012_01_02 2012_01_03 2012_01_04 2012_01_05 2
data/study_005/06_Num: 2012_01_00 2012_01_01 2012_01_02 2012_01_03 2012_01_04 2012_01_05 2
data/study_005/07_Num: 2012_01_00 2012_01_01 2012_01_02 2012_01_03 2012_01_04 2012_01_05 2
data/study_005/08_Num: 2012_01_00 2012_01_01 2012_01_02 2012_01_03 2012_01_04 2012_01_05 2
dtpwmbp:data pwadas$ 

我希望这会对你有所帮助,你将能够根据你的需要和模式对其进行修改,这似乎是我所能做的:)你应该分析一个类轮,尤其是“cut”命令和 perl-regex 部分,它从“ls”输出中删除换行符和完整目录名称。这可能是最优的,但美化不是这里的重点,我想 :) 所以,祝你好运:) 附言。 “head”命令限制第一行的输出,你可能想跳过 |头.. | 部分。

关于linux - 如何在 Linux 中创建一个列为降序子目录的 txt 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12499110/

相关文章:

linux - 为什么 gdb 会挂起?

linux - 在shell脚本中最后一次出现单词之前获取子字符串

linux - Fedora 14 - 错误 5 - 磁盘上没有空间 - 安装后

node.js - 使用 node.js 从标准输出实时读取

C简单文件整数计数程序实现问题

c++ - 按字符读取字符串直到行尾 C/​​C++

c++ - 什么是相关过程和不相关过程?

css - 如何保存包含所有媒体的公共(public) html 页面并保留结构

c# - 确定将代码分解到不同文件夹和命名空间的最佳方式

c++ - Makefile: 将 .o 放在不同目录中的规则