我的数据遵循以下结构:
../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/