Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux中创建列为下行子目录的txt文件?_Linux_File_Directory Structure - Fatal编程技术网

如何在Linux中创建列为下行子目录的txt文件?

如何在Linux中创建列为下行子目录的txt文件?,linux,file,directory-structure,Linux,File,Directory Structure,我的数据结构如下: ../data/study\u ID/FF\u编号/考试编号/日期 其中数据目录包含176个参与者的子目录。ID号代表参与者ID,下面的每个子目录代表一些实验编号。 我想创建一个txt文件,每个参与者一行,并包含以下列:研究ID、FF\U编号、考试编号和日期 然而,它变得有点复杂,因为我想将参与者分成每个区块约15-20 ppt的区块,用于下面的分析 有什么建议吗? 干杯。嗯,没人 您应该重定向“查找”命令的输出,考虑开关类型D和-Max深度,并且可能用SED解析它,用“空格

我的数据结构如下:

../data/study\u ID/FF\u编号/考试编号/日期

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

然而,它变得有点复杂,因为我想将参与者分成每个区块约15-20 ppt的区块,用于下面的分析

有什么建议吗? 干杯。

嗯,没人

您应该重定向“查找”命令的输出,考虑开关类型D和-Max深度,并且可能用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_编号、考试编号和日期。”

因此,我使用以下一行:

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行的输出,您可能希望跳过 |头| 部分。

嗯,没有人

您应该重定向“查找”命令的输出,考虑开关类型D和-Max深度,并且可能用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_编号、考试编号和日期。”

因此,我使用以下一行:

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行的输出,您可能希望跳过 |头|
部分。

你能展示一个示例输出吗?你能展示一个示例输出吗?那么我到目前为止做了什么:
find-mindepth 4-类型d | grep-v dir>mod.txt
。我使用
tr-s'/'mod2.txt
将/替换为空格。但是,现在每个字符都被视为一个单独的列。我相信有一种简单的方法可以将字符(不幸的是,不同数量的字符)分组到列中,方法是使用空格分隔字符。再说一次,有什么建议吗?谢谢,我尝试了
column-t4-s”“modd.txt
,但是有没有办法检查这个命令是否真的有效(除了打印)。给我几分钟,我会准备一个目录结构供测试:)ps。新用户提示-如果你重视某人对你的问题的回答,你可以接受/投票。当你的声望点增加时,你也可以对问题和答案进行否决投票。所以我到目前为止所做的:
find-mindepth 4-类型d | grep-v dir>mod.txt
。我使用
tr-s'/'mod2.txt
将/替换为空格。但是,现在每个字符都被视为一个单独的列。我相信有一种简单的方法可以将字符(不幸的是,不同数量的字符)分组到列中,方法是使用空格分隔字符。再说一次,有什么建议吗?谢谢,我尝试了
column-t4-s”“modd.txt
,但是有没有办法检查这个命令是否真的有效(除了打印)。给我几分钟,我会准备一个目录结构供测试:)ps。新用户提示-如果你重视某人对你的问题的回答,你可以接受/投票。当你的声望提高时,你也可以对问题和答案进行否决投票。