다음과 같은 디렉토리에 .csv 파일 세트가 있습니다.
abc_q1_w1.csv
defg_q11_w2.csv
hijk_q11_w3.csv
부분적인 파일 이름을 추출하여 열에 넣는 스크립트를 작성하고 싶습니다.
abc q1 w1
defg q11 w2
hijk q11 w3
bash 스크립트를 사용하여 이러한 종류의 파일 이름 추출을 구현하는 방법을 아는 사람이 있습니까?
답변1
다음과 같은 것을 사용할 수 있습니다.
ls -1 | tr '_' '\t'
답변2
sed 사용
$ printf "%s\n" * | sed 's/.csv$//; s/_/\t/g'
abc q1 w1
defg q11 w2
hijk q11 w3
작동 방식:
printf "%s\n" *
한 줄에 하나의 파일 이름을 인쇄합니다.s/.csv$//
후행을 제거합니다.csv
.s/_/\t/g
_
탭 문자로 변환합니다 .
배쉬를 사용하여
$ for f in *; do f="${f%.csv}"; printf "%s\n" "${f//_/$'\t'}"; done
abc q1 w1
defg q11 w2
hijk q11 w3
명확성을 위해 위의 코드를 여러 줄로 나눌 수 있습니다.
for f in *
do
f="${f%.csv}"
printf "%s\n" "${f//_/$'\t'}"
done
${f%.csv}
후행 문자를 제거 .csv
하고 ${f//_/$'\t'}
모두 _
탭으로 변환합니다.
echo
파일 이름 중 하나가 로 시작하면 -
많은 쉘이 파일 이름을 옵션으로 해석하려고 시도하지만 제대로 작동하지 않기 때문에 이 작업을 사용하지 않습니다 .
다른 디렉터리에서 코드 실행
$ for f in "$dir"/*; do f="${f#$dir/}"; f="${f%.csv}"; printf "%s\n" "${f//_/$'\t'}"; done
abc q1 w1
defg q11 w2
hijk q11 w3