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)
但我不确定什么命令会为每一行创建一个目录,以及我如何为每一行递归地创建它。
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)
| 归档时间: |
|
| 查看次数: |
5231 次 |
| 最近记录: |