Как изменить имена столбцов на строчные с помощью linux и сохранить файл как есть? - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь изменить имена столбцов на строчные в файле csv. Я нашел код для этого в Интернете, но я не знаю, как заменить старые имена столбцов (в верхнем регистре) на новые имена столбцов (в нижнем регистре) в исходном файле. Я сделал что-то вроде этого: $cat head -n1 xxx.csv | tr "[A-Z]" "[a-z]"

Но он просто выводит имена столбцов в нижнем регистре, чего для меня недостаточно. Я пытался добавить sed -i, но это не помогло. Спасибо !!

Ответы [ 3 ]

1 голос
/ 29 мая 2020

Используя (победитель удобочитаемости):

кратко:

awk 'NR==1{print tolower($0);next}1' file.csv

или используя тернарный оператор:

awk '{print (NR==1) ? tolower($0): $0}' file.csv

или используя Операторы if / else:

awk '{if (NR==1) {print tolower($0)} else {print $0}}' file.csv

Чтобы изменить файл по-настоящему:

awk 'NR==1{print tolower($0);next}1' file.csv | tee /tmp/temp
mv /tmp/temp file.csv

Для вашей информации, , используя вместо переключатель редактирования -i сделайте то же самое: он использует временный файл под капотом.

Вы можете проверить это, используя:

strace -f -s 800 sed -i'' '...' file
1 голос
/ 29 мая 2020

Использование :

perl -i -pe '$_=lc() if $.==1' file.csv

Заменяет файл на лету на -i переключатель

1 голос
/ 29 мая 2020

Вы можете использовать sed, чтобы указать ему заменить первую строку на все строчные, а затем распечатать остальное как есть:

sed '1s/.*/\L&/' ./xxx.csv

Перенаправить вывод или использовать -i для выполнения редактирование на месте.

Proof of Concept

$ echo -e "COL1,COL2,COL3\nFoO,bAr,baZ" | sed '1s/.*/\L&/'
col1,col2,col3
FoO,bAr,baZ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...