1

我的数据遵循以下结构:

../data/study_ID/FF_Number/Exam_Number/日期,

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

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

有什么建议么?干杯。

4

1 回答 1

1

嗯,没人吗?

您应该重定向“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”输出中删除换行符和完整目录名称。这可能是最优的,但美化不是这里的重点,我猜 :) 所以,祝你好运 :) PS。“head”命令限制 N 首行的输出,您可能想跳过 | 头.. | 部分。

于 2012-09-19T17:43:11.557 回答