이름을 다음으로 전환하여 여러 .csv 파일에 .csv 헤더를 동시에 포함해야 합니다.
원래 이름 1c.csv, 원래 이름 2c.csv, 원래 이름 3c.csv
현재 프로세스는 다음과 같습니다.
cat header.csv originalname1.csv > originalname1c.csv
cat header.csv originalname2.csv > originalname2c.csv
cat header.csv originalname3.csv > originalname3c.csv
등.
위의 예처럼 단일 명령으로 여러 파일에 헤더를 추가할 수 있나요?
보너스 1: 파일 이름이 무작위이면 어떻게 되나요? 규칙 유지: anyname.csv에서 anynamec.csv까지
답변1
for name in anyname*.csv; do
cat header.csv "$name" >"${name%.csv}c.csv"
done
다음은 anyname*.csv
.csv 파일의 내용을 추가하려는 CSV 파일의 이름과 일치하는 디렉터리 경로를 포함할 수 있는 몇 가지 셸 패턴입니다 header.csv
. 이상적으로 이 패턴은 이름과 일치하지 않아야 합니다 header.csv
. 그렇다면 다른 곳으로 이동하거나, 이름을 바꾸거나, 건너뛰도록 명시적인 테스트를 삽입하는 것을 고려해 보세요.
for name in anyname*.csv; do
[ "${name##*/}" = header.csv ] && continue
cat header.csv "$name" >"${name%.csv}c.csv"
done
또는 bash
또는 zsh
셸 에서
for name in anyname*.csv; do
[ "$name" -ef header.csv ] && continue
cat header.csv "$name" >"${name%.csv}c.csv"
done
(또는 그냥 무시하고 headerc.csv
생성될 수 있는 파일을 삭제하세요.)
루프는 일치하는 이름을 반복하고 헤더를 CSV 레코드와 연결하여 원본과 이름은 동일하지만 파일 이름 .csv
접미사가 c.csv
.
표준 확장자 ${var%pattern}
는 으로 확장되지만 $var
일치하는 가장 짧은 접미사 문자열은 제거됩니다 pattern
. 확장 ${var##pattern}
도 표준이며 일치하는 가장 긴 접두사 문자열을 제거합니다 $var
. 위의 예에서는 이를 삭제하는 데 사용합니다 $name
.
답변2
for i in 1 2 3; do cat header.csv originalname${i}.csv > originalname${i}c.csv; done
또는
for i in name1 mynameH arglebargle; do cat header.csv ${i}.csv > ${i}c.csv; done
또한 번호가 매겨진 여러 파일의 경우:
for i in $(seq 1000); do cat header.csv file${i} > file${i}c.csv; done
$(seq 1000)
또한 될 수 있습니다{1..1000}
이것이 당신을 만든다
cat header.csv file1 > file1c.csv
cat header.csv file2 > file2c.csv
cat header.csv file3 > file3c.csv
.
.
.
cat header.csv file998 > file998c.csv
cat header.csv file999 > file999c.csv
cat header.csv file1000 > file1000c.csv
이를 수행하는 일반적인 방법은 다음 줄을 사용하는 것입니다.
for i in *.csv; do if [ "$i" != header.csv ]; then cat header.csv "$i" > $(basename "$i" .csv)c.csv; fi; done
"basename" 명령은 주어진 경로를 분석하고 파일 이름만 반환하며, 접미사를 지정한 경우(여기서 .csv를 사용한 것처럼) 해당 부분도 제거합니다. 그런 다음 "c"를 추가하고 .csv를 다시 넣으면 이것이 새 파일 이름이 됩니다.
"if" 조건은 헤더 파일을 건너뜁니다. 그렇지 않으면 헤더 파일도 중단됩니다.