我有一个包含3列的CSV文件:
id,text,date
123,hi 你好吗?,2016-01-01
246,this is stackoverflow 我需要帮忙,2016-02-01
我想只编辑第2列,其中我只删除英文字符并保留中文字符。其他列保持不变。
我希望输出:
id,text,date
123,你好吗?,2016-01-01
246,我需要帮忙,2016-02-01
有没有比这更好的方法:
cat myfile.csv|cut -d, -f2|sed 's/[a-zA-Z]*//g' > tmp.csv
paste -d, myfile.csv tmp.csv|awk -F, '{OFS=",";print $1,$7,$3}' >tmp2.csv
答案 0 :(得分:3)
awk -F, 'BEGIN {OFS=","} { if (NR>1) {gsub(/[\x00-\x7F]/, "", $2)}; print }' test.txt
NR>1
:不要在第一行操作gsub(/[\x00-\x7F]/, "", $2)
:摆脱第2列中的ascii字符。doc 答案 1 :(得分:2)
如果您在问题底部发布的脚本适用于您,那么这样做:
awk 'BEGIN{FS=OFS=","} NR>1{gsub(/[a-zA-Z]/,"",$2)} 1' file
你说"字符"虽然,不是"字母",所以YMMV。
答案 2 :(得分:0)
awk -F, '{ s=split($2,t," "); sub($2, t[s]); print }' file
id,text,date
123,你好吗?,2016-01-01
246,我需要帮忙,2016-02-01
答案 3 :(得分:0)
awk 'NR==1{print;}NR>1{gsub(/[a-zA-Z ]+/,"");print;}' your_file
id,text,date
123,你好吗?,2016-01-01
246,我需要帮忙,2016-02-01