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

Lac*_*cey 5 bash shell-script text-processing

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

脚本被命名studentDir,输入文件被命名为studentInfo.txt.
这是它的两行:

Sara Smith Freshman Marketing
James Lucas Junior Engineering
Run Code Online (Sandbox Code Playgroud)

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

$ studentDir studentInfo.txt .
Run Code Online (Sandbox Code Playgroud)

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

这些目录应命名为LLLLFF。
例如:

SmitSa
LucaJa
Run Code Online (Sandbox Code Playgroud)

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

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

DIRNAME=$(cut -d' ' -f2 | cut -c1-4 ; cut -d' ' -f1 | cut -c1-2) 
mkdir "$DIRNAME" 
Run Code Online (Sandbox Code Playgroud)

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

Hau*_*ing 6

awk 解决方案

awk '{print substr($2,1,4) substr($1,1,2)}' file
Run Code Online (Sandbox Code Playgroud)

为您提供目录名称。

mkdir $(awk '{print substr($2,1,4) substr($1,1,2)}' file)
Run Code Online (Sandbox Code Playgroud)

创建目录(如果它们不是太多)。对于巨大的数字(10,000+),您可以使用:

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

bash 解决方案

awk 不是必需的,shell 可以自己做:

while read first last rest; do mkdir -p "${last:0:4}${first:0:2}"; done <file
Run Code Online (Sandbox Code Playgroud)