我有一个包含不一致数据的大型.csv文件,如下所示:
O_T_11c,234858DEF8,OHL11_c_234858DEF8.csv,c
Ohl12und,234858DEF8,OHL12_u234858DEF8.csv,u
Ohlabx13und,234858DEF8,OHL13u_234858DEF8.csv,u
Ohl14und,234858DEF8,OHL14u_234858DEF8.csv,u
我想仅从第一列中删除所有字母,而将其余字母单独删除。我试图在awk中使用正则表达式来做到这一点,但这给了我 奇怪的输出。我希望我的输出最终是这样的:
11,234858DEF8,OHL11_c_234858DEF8.csv,c
12,234858DEF8,OHL12_u234858DEF8.csv,u
13,234858DEF8,OHL13u_234858DEF8.csv,u
14,234858DEF8,OHL14u_234858DEF8.csv,u
我知道我可以使用像这样的sed
sed 's/[^0-9]*//g'
删除所有非数字字符,但我只想将其应用于第一列。
答案 0 :(得分:2)
短 awk 方法:
awk -F, '{ gsub(/[^0-9]/,"",$1) }1' OFS=',' file
输出:
11,234858DEF8,OHL11_c_234858DEF8.csv,c
12,234858DEF8,OHL12_u234858DEF8.csv,u
13,234858DEF8,OHL13u_234858DEF8.csv,u
14,234858DEF8,OHL14u_234858DEF8.csv,u
答案 1 :(得分:2)
现在我们知道实际输入是逗号分隔的,这是您问题的最快解决方案。
sed -i 's/^[^0-9]\+//;s/[^0-9,]\+//' largefile.csv
s/^[^0-9]\+//
- 将从行的开头删除任何非数字。
s/[^0-9,]\+//
- 将删除逗号之前的任何非数字跟踪数字。