删除 CSV 文件中特定列中的所有大写字母

删除 CSV 文件中特定列中的所有大写字母

我有一个包含 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

相关内容