指定された(引数として)ファイルからデータを読み取るbashシェルスクリプトを作成しようとしています。ファイル内の各行について、指定された(引数として)ディレクトリの下にサブディレクトリを作成します。
スクリプトの名前はstudentDir
で、入力ファイルの名前はstudentInfo.txt
。
ここに2行あります:
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"
しかし、どのコマンドが各行のディレクトリを作成するのか、そしてどのように各行に対して再帰的にそれを行うことができるのかはわかりません。
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
は必要ありません、シェルはそれ自体でそれを行うことができます:
while read first last rest; do mkdir -p "${last:0:4}${first:0:2}"; done <file
Perl
を使用できます。言っている:
Perl -lanE 'mkdir substr(@F[1],0,4) . substr(@F[0],0,2)' studentInfo.txt
目的のディレクトリを作成します。