*.tsv 파일에 awk 출력을 전달하여 파일 이름 바꾸기

*.tsv 파일에 awk 출력을 전달하여 파일 이름 바꾸기

데이터를 보유하고 *.tsv데이터를 설명하는 파일입니다. 설명을 사용하고 이에 따라 데이터 이름을 바꾸고 싶습니다.

이것을 봐주세요:

  • awktsv를 필터링하는 명령은 다음과 같습니다.

      common_voice_en_22090684.mp3 four
      common_voice_en_22090691.mp3 no
      common_voice_en_22090696.mp3 one
    
  • 다음 디렉터리를 찾아보세요 *.mp3.

    for i in *.mp3 ; do
    echo $i
    
  • mv파일 이름을 바꾸는 명령이며 두 개의 매개변수(변경할 파일과 변경할 내용)를 사용합니다.

awk(설명 읽기 및 사용) 및 (전달된 설명 사용)을 사용하여 mv기존 파일의 이름을 바꾸는 방법은 무엇입니까? 따라서 위의 예를 보면 결과는 다음과 같습니다.

four.mp3    
no.mp3  
one.mp3 

어떤 명령을 사용하는지는 중요하지 않습니다. 이를 수행하는 방법에 대한 아이디어나 제안은 매우 환영합니다!

답변1

이는 요구 사항을 충족하지 않지만 많은 파일을 처리하려는 경우 각 mp3에 대해 tsv를 한 번 열지 않기 때문에 셸 확장자가 아닌 .tsv를 드라이버로 사용하면 더 나은 성능을 얻을 수 있습니다. echo기대한 대로 작동하는 것 같으면 삭제하세요.

$ while read -r src tgt; do [ -f "$src" ] && echo mv -i "$src" "$tgt.mp3"; done < file.tsv

답변2

IIUC, 출력을 저장한 후 다음과 같은 것을 원합니다.awk 명령은 tsv를 필터링합니다.파일에서:

#!/usr/bin/env sh

for i in *.mp3
do
    new_name="$(awk -v name="$i" '$1 == name {print $2}' file)"
    if [ -n "$new_name" ]
    then
        echo mv -- "$i" "$new_name"
    fi
done

실제로 이름 바꾸기를 수행하려면 삭제를 수행 echo하되, 필요에 맞는지 확인하려면 먼저 실행하십시오. 또한 mv스크립트 실행이 해당 행에 도달할 때 원본 파일이 삭제되므로 실패할 가능성이 거의 없습니다. set -e첫 번째 mv실패 후 즉시 종료할 수 있습니다.

관련 정보