다음과 같이 테이블(텍스트 탭으로 구분)에 데이터를 구성했습니다.
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 루프뿐입니다.