폴더에 여러 파일이 있습니다. 또한 특정 순서로 나열된 파일 이름 (확장자 없음)이 포함 된 csv 파일이 있습니다. 파일 이름의 시작 부분에있는 텍스트 파일 목록의 위치를 포함하도록 폴더의 파일 이름을 바꾸고 싶습니다.
즉, 내 폴더에는 다음이 포함됩니다.
aaa.txt, bbb.txt, ccc.txt
filename.csv에는 다음이 포함됩니다.
ccc
aaa
bbb
내가 얻고 싶은 것은 :
1_ccc.txt, 2_aaa.txt 3_bbb.txt
bash에서 이것을 할 수 있습니까?
for i in *.txt
do line=$(grep -nx -m 1 -- "${i%%.*}" filename.csv | cut -f 1 -d ':')
name=${line}_${i}
mv -- "$i" "$name"
done
설명
"${i%%.*}"
: Kusalananda가 제안한대로의 값을 취하고 값의 꼬리 $i
에서 패턴을 .*
제거합니다 (추가 정보 매개 변수 확장 ).
grep -nF --
-x
전체 라인과 일치-m 1
일치하는 한 줄 이후 파일 읽기 중지 ( grep
파일이 길면 모든 줄을 읽지 않기 위해 )--
옵션의 끝을 나타내는 데 사용됩니다 (more -in shell )
-n
다음 형식으로 줄 자체 대신 줄 번호를 반환합니다.
2:aaa 3:bbb 1:ccc
cut -f 1 -d ':'
:
위의 결과에서 구분자로 필드 1을 추출합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다