주어진(인수) 파일에서 데이터를 읽고 파일의 각 줄에 대해 주어진(인수) 디렉터리 아래에 하위 디렉터리를 만드는 bash 쉘 스크립트를 작성하려고 합니다.
스크립트 이름은 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 '{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
배쉬 솔루션
awk
꼭 필요한 것은 아닙니다. 쉘이 스스로 이를 수행할 수 있습니다.
while read first last rest; do mkdir -p "${last:0:4}${first:0:2}"; done <file
답변2
.say를 사용할 수 있습니다 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개 필드만 포함하는 배열을 만듭니다. 배열의 각 요소에는 두 개의 필드(첫 번째, 마지막)가 있습니다. 두 번째 줄은 배열의 각 요소를 반복하고 필요에 따라 각 필드를 대체하고 새로 형성된 각 항목에서 새 디렉터리를 만듭니다.