주어진 텍스트 파일의 각 줄에 대한 디렉터리를 만드시겠습니까?

주어진 텍스트 파일의 각 줄에 대한 디렉터리를 만드시겠습니까?

주어진(인수) 파일에서 데이터를 읽고 파일의 각 줄에 대해 주어진(인수) 디렉터리 아래에 하위 디렉터리를 만드는 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개 필드만 포함하는 배열을 만듭니다. 배열의 각 요소에는 두 개의 필드(첫 번째, 마지막)가 있습니다. 두 번째 줄은 배열의 각 요소를 반복하고 필요에 따라 각 필드를 대체하고 새로 형성된 각 항목에서 새 디렉터리를 만듭니다.

관련 정보