다음 형식의 3000개 이상의 행이 포함된 CSV 파일이 있습니다.
R1C1, ABC123abc, R1C3
R2C1, DEFG456defg, R2C3
R3C1, HIJKL789hijkl, R3C3
내용이 다음과 같이 보이도록 파일의 두 번째 열에서 모든 대문자를 제거해야 합니다.
R1C1, 123abc, R1C3
R2C1, 456defg, R2C3
R3C1, 789hijkl, R3C3
이것이 어떻게 달성될 수 있습니까?
답변1
당신은 그것을 사용할 수 있습니다 awk
:
$ awk -F',' '{sub(/[[:upper:]]+/,"",$2)}1' OFS=',' file
R1C1, 123abc, R1C3
R2C1, 456defg, R2C3
R3C1, 789hijkl, R3C3
답변2
두 번째 필드의 대문자가 흩어지는 경우,
awk -F ',' '{gsub(/[[:upper:]]/, X, $2)}1' OFS=, file
답변3
그리고밀러( mlr
):
$ mlr --csv -N put '$2 = gsub($2, "[[:upper:]]", "")' file
R1C1, 123abc, R1C3
R2C1, 456defg, R2C3
R3C1, 789hijkl, R3C3
이는 데이터를 헤더 없는 CSV 파일로 읽고 모든 대문자를 공백으로 바꿔(즉, 제거) 각 레코드의 두 번째 필드를 수정합니다.
답변4
Bash는 다음 명령과 함께 사용됩니다 sed
.
#!/bin/bash
cnt=0;
while IFS=, read a b c;
do
echo -n $a ; cnt=$[cnt+1];
sed -e 's/[^,]*,\([^,]*\).*/\1/' file |
sed -e 's/\([[:upper:]]\)//g'|
sed -e $cnt'q;d'|
tr '\n' ' ' ;
echo $c;
done < file
생산하다:
R1C1 123abc R1C3
R2C1 456defg R2C3
R3C1 789hijkl R3C3