테이블의 특정 항목에 대한 폴더 만들기

테이블의 특정 항목에 대한 폴더 만들기

다음과 같이 테이블(텍스트 탭으로 구분)에 데이터를 구성했습니다.

NAME      TIME          ID        DATE 
--------
John        03:25:01    A10A      2015/05/12
Marry       01:01:15    N000M     2013/01/01
.
.
.
.

이 테이블의 각 이름에 대한 폴더를 어떻게 만들 수 있습니까? 또한 다음과 같이 ID와 시간으로 폴더 이름을 지정하려면 어떻게 해야 합니까?

For John the created folder name is A10A-032501
For Marry the created folder name is N000M-010115

답변1

tail -n+3 file | while IFS=$'\t' read -r name time id date; do mkdir "$id-${time//:/}"; done

실행 후 다음 디렉터리가 생성됩니다.

$ ls -d */
A10A-032501/  N000M-010115/

여러 줄 버전

어떤 사람들은 쉘 코드를 여러 줄로 나누기를 좋아합니다.

tail -n+3 file | while IFS=$'\t' read -r name time id date
do
    mkdir "$id-${time//:/}"
done

어떻게 작동하나요?

  • tail -n+3 file

    file그러면 두 헤더 행을 제거한 후 표준 출력으로 보냅니다.

  • while IFS=$'\t' read -r name time id date; do

    그러면 의 줄에서 루프가 시작됩니다 file. IFS=$'\t'4개의 열을 변수 name, time및 탭 문자를 구분 기호로 사용하여 id읽어 옵니다 date.

  • mkdir "$id-${time//:/}"

    그러면 디렉토리가 생성됩니다. ${time//:/}시간 필드에서 콜론을 제거합니다.

  • done

    이는 사이클의 끝을 나타냅니다.

답변2

데이터가 "data.tsv"에 있다고 가정합니다.

sed -e '1,2d' data.tsv | while read myN myT myI myD; do mkdir $myI-${myT//:/} ; done

설명: sed는 data.tsv 파일에서 "-e" 표현식 "d"를 실행하여 "1,2" 줄을 삭제합니다.

귀하의 예에 있는 값에는 공백이 포함되어 있지 않으므로 IFS를 재정의하지 않았습니다.

남은 것은 표준 while 루프뿐입니다.

관련 정보