열에서 csv 파일 이름의 일부 추출

열에서 csv 파일 이름의 일부 추출

다음과 같은 디렉토리에 .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

관련 정보