web-dev-qa-db-ja.com

指定されたテキストファイル内の各行にディレクトリを作成しますか?

指定された(引数として)ファイルからデータを読み取る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" 

しかし、どのコマンドが各行のディレクトリを作成するのか、そしてどのように各行に対して再帰的にそれを行うことができるのかはわかりません。

5
Lacey

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
6
Hauke Laging

Perlを使用できます。言っている:

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

目的のディレクトリを作成します。

1
devnull