我有一个CSV文件,其中包含许多行,如:
"wmiprvse.exe“、"3596”、“控制台”、"0“、"5,632 K”、“运行”、"NT权限\网络服务“、"0:00:00”、"N/A“
并希望将这些行更改为:
wmiprvse.exe,NT授权\网络服务,N/A
,什么是最好的方法?
到目前为止,我已经使用了以下内容(使用sed):
cat myfile | sed -e "1,2d;s/\"*//g;s/,.*,.*,.*,.*,.*,\(.*\),.*,\(.*\)/,\1,\2/"但它不能正常工作,有什么建议吗?
发布于 2010-08-25 13:09:43
你能用awk吗?
正如wilhelmtell和Colin所指出的,用逗号替换每个空格并不是正确的方法,因为它也替换了字符串中的空格,比如NT AUTHORITY\NETWORK SERVICE。
用这个代替
$ cat temp | awk 'BEGIN{FS = ","}{print $1","$8","$10}' | sed 's/"//g'
wmiprvse.exe,NT AUTHORITY\NETWORK SERVICE,N/A旧答案
$ cat temp | awk 'BEGIN{FS = ","}{print $1, $8, $10}' | sed 's/"//g'|
sed 's/ /,/g'
wmiprvse.exe,NT,AUTHORITY\NETWORK,SERVICE,N/A1.
awk 'BEGIN{FS = ","}{print $1, $8, $10}'打印栏1、8和10
2.
sed 's/"//g'删除"
3.
sed 's/ /,/g'用,替换空间
发布于 2010-08-25 13:09:48
如果您可以在值中使用(转义)引号或逗号,那么正则表达式就不是工作的合适工具。为此您将需要一个指定的状态机。最好的选择是使用Ruby、Python、Perl或类似工具编写一个小脚本。
发布于 2010-08-25 13:10:38
我认为您想要使用awk来实现这个目的:
[jkramer/sgi5k:~]# cat foo
"wmiprvse.exe","3596","Console","0","5,632 K","Running","NT AUTHORITY\NETWORK SERVICE","0:00:00","N/A"
[jkramer/sgi5k:~]# awk -F'","|"' '{print $2 "," $8 "," $10}' foo
wmiprvse.exe,NT AUTHORITY\NETWORK SERVICE,N/Ahttps://stackoverflow.com/questions/3566073
复制相似问题