为给定文本文件中的每一行创建一个目录?

为给定文本文件中的每一行创建一个目录?

我正在尝试编写一个 bash shell 脚本,该脚本将从给定(作为参数)文件中读取数据,并为文件中的每一行在给定(作为参数)目录下创建一个子目录。

该脚本的名称为studentDir,输入文件的名称为studentInfo.txt
这是其中的两行:

Sara Smith Freshman Marketing
James Lucas Junior Engineering

用户将在命令行上写入脚本名称、txt 文件名以及新目录应存储的目录。我想会是这样的:

$ studentDir studentInfo.txt .

这将在当前目录中创建子目录。

目录应该命名LLLLFF
例如:

SmitSa
LucaJa

(不需要输入文件中的其他信息)

我想得到我会使用的名字:

DIRNAME=$(cut -d' ' -f2 | cut -c1-4 ; cut -d' ' -f1 | cut -c1-2) 
mkdir "$DIRNAME" 

但我不确定什么命令会为每一行创建一个目录,以及如何为每一行递归地执行此操作。

答案1

awk解决方案

awk '{print substr($2,1,4) substr($1,1,2)}' file

为您提供目录名称。

mkdir $(awk '{print substr($2,1,4) substr($1,1,2)}' file)

创建目录(如果目录不是太多)。对于大量(10,000+),您可以使用:

awk '{print substr($2,1,4) substr($1,1,2)}' file | xargs --delimiter=\\n mkdir

bash解决方案

awk没有必要,shell 可以自己完成:

while read first last rest; do mkdir -p "${last:0:4}${first:0:2}"; done <file

答案2

你可以使用perl.说:

perl -lanE 'mkdir substr(@F[1],0,4) . substr(@F[0],0,2)' studentInfo.txt

将创建所需的目录。

答案3

尝试这个:

arr=($(cut -d ' ' -f1,2 < $*))
mkdir $(for ((i=0;i<${#arr[@]};i=i+2)); do echo ${arr[$i+1]:0:4}${arr[$i]:0:2}; done)

第一行将创建一个仅包含输入中前 2 个字段的数组。数组中的每个元素都有两个字段(第一个、最后一个)。第二行将遍历数组中的每个元素,并根据要求替换每个字段,并从每个新形成的条目中创建一个新目录。

相关内容