basename을 사용할 때 "awk for loop"가 작동하지 않습니다.

basename을 사용할 때 "awk for loop"가 작동하지 않습니다.

awk를 통해 실행하고 싶은 xyz 파일이 많이 있습니다. 각 파일에 "_s"를 추가하여 새 파일을 만들고 싶습니다. 기본 이름 구문을 올바르게 지정하는 데 몇 가지 문제가 있습니다. 이것이 내가 가진 것입니다.

for i in *.xyz; do awk -F" " '{printf $1 $2 $3}' > $(basename $i)_s.xyz ; done

답변1

처리된 파일의 출력을 새 파일에 쓰고 _s파일 이름 부분에 확장자를 추가하는 올바른 구문은 다음과 같습니다.

for i in *.xyz; do awk -F" " '{printf $1 $2 $3}' $i > ${i%\.*}_s.xyz ; done

이 섹션에서는 마지막 항목부터 끝까지 문자열을 ${i%\.*}잘라내어 확장자를 효과적으로 제거합니다.$i.

귀하의 예에서는 를 사용할 수 있지만 ${i%\.xyz}이는 덜 일반적입니다.

답변2

파일 이름을 "ls *.xyz"로 전달한 다음 $i의 이름을 바꿔야 합니다.

for i in `ls *.xyz`; do
  mv $i $i_s
done

관련 정보