awk只使用正则表达式编辑1列

时间:2016-01-28 23:29:46

标签: regex awk

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

4 个答案:

答案 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