Linux: CSV 파일의 첫 번째 줄을 모두 대문자로 변경

Linux: CSV 파일의 첫 번째 줄을 모두 대문자로 변경

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)에 대해 줄을 인쇄하는 기본값을 수행합니다.

관련 정보