![删除 CSV 文件中特定列中的所有大写字母](https://linux22.com/image/40908/%E5%88%A0%E9%99%A4%20CSV%20%E6%96%87%E4%BB%B6%E4%B8%AD%E7%89%B9%E5%AE%9A%E5%88%97%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E5%A4%A7%E5%86%99%E5%AD%97%E6%AF%8D.png)
我有一个包含 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