我正在尝试编写一个 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 个字段的数组。数组中的每个元素都有两个字段(第一个、最后一个)。第二行将遍历数组中的每个元素,并根据要求替换每个字段,并从每个新形成的条目中创建一个新目录。