csv 파일 세트가 있고 각 파일의 첫 번째 행에는 데이터 세트의 필드 이름이 포함되어 있습니다. 일부 csv 파일의 필드 이름은 모두 대문자이고, 다른 파일의 필드 이름은 모두 소문자입니다. 내 질문은 각 파일의 첫 번째 행(필드 이름이라고도 함)이 각 열에서 모두 대문자 문자열로 표시되도록 각 csv 파일을 어떻게 변경합니까?
예: Dataset1.csv
a b c
x x x
Dataset2.csv
A B C
y y y
Dataset1.csv를 아래와 같이 보이게 하려면 어떻게 해야 합니까?
A B C
x x x
답변1
이는 GNU sed의 대문자 옵션을 통해 수행할 수 있습니다. 내부 옵션 -i
:
sed -i '1s/.*/\U&/' Dataset1.csv
답변2
awk와 GNU sed를 사용하여 이를 수행할 수 있습니다.
방법 1
awk 'NR==1{(i=toupper($0));print i}' Dataset1.csv ; awk 'NR >=2 {print $0}' Dataset1.csv
산출
A B C
x x x
z z z
방법 2
sed '1s/.*/\U&/g' Dataset1.csv
산출
A B C
x x x
z z z
답변3
내 질문이 해당 사이트의 주제와 관련이 없다는 말을 듣고 다음과 같은 답변을 얻었기 때문에 이것은 stackoverflow에서 다시 게시되었습니다.
파일이 줄바꿈으로 끝나는 것을 고려하면 다음과 같습니다.
head -1 Dataset1.csv | tr '[:lower:]' '[:upper:]' > Dataset1_new.csv ; tail -$(( $(wc -l Dataset1.csv | cut -d ' ' -f 8) - 1 )) Dataset1.csv > Dataset1_new.csv
head -1 Dataset1.csv | tr '[:lower:]' '[:upper:]'
: 파일의 첫 번째 줄을 가져와서 대문자로 변환하고 표준 출력으로 출력합니다.
> Dataset1_new.csv
: 출력을 Dataset1_new.csv라는 새 파일로 리디렉션합니다.
tail -$(( $(wc -l Dataset1.csv | cut -d ' ' -f 8) - 1 ))
Dataset1.csv: 나머지 행 출력
> Dataset1_new.csv:
다시 출력을 Dataset1_new.csv 파일로 리디렉션합니다.
GNU sed를 사용하여 이 작업을 수행할 수 있습니다.
$ sed -i -e '1 s/\(.*\)/\U\1/' input.csv
이를 달성하기 위해 awk를 사용할 수도 있습니다.
awk -i.bak 'NR==1{ print toupper($0) }NR>1' Dataset1.csv
설명하다:
awk는 csv 파일을 백업한 다음 첫 번째 줄(NR==1)에 대해 전체 줄 $0을 대문자로 변경하고, 파일의 나머지 부분(NR>1)에 대해 줄을 인쇄하는 기본값을 수행합니다.