我正在使用CSV列:
info,example-string,super-example-string,otherinfo
我想得到:
example-string super example string
现在,我正在运行以下命令:
awk -F ',' '{print $3}' | sed "s/-//g"
但是,我必须paste
这些行合并$2
和$3
。
无论如何都要做这样的事情?
awk -F ',' '{print $2" "$3}' | sed "s/-//g"
除了,仅在$3
和$2
上执行sed命令的地方?我稍后会担心如果线路不匹配,数据可能会错位。
请注意:我需要保留SED命令的管道。我只是使用了一个简单的例子,但我之后也运行了很多命令。
答案 0 :(得分:3)
尝试:
$ awk -F, '{gsub(/-/," ",$3); print $2,$3}' file
example-string super example string
-F,
这告诉awk使用逗号作为字段分隔符。
gsub(/-/," ",$3)
这将使用空格替换字段3中的所有-
。
print $2,$3
这会打印字段2和3.
$ echo 'info,example-string,super-example-string,otherinfo' | awk -F, '{gsub(/-/," ",$3); print $2,$3}'
example-string super example string
在sed:
的管道中$ echo 'info,example-string,super-example-string,otherinfo' | awk -F, '{gsub(/-/," ",$3); print $2,$3}' | sed 's/string/String/g'
example-String super example String
答案 1 :(得分:1)
虽然最好的解决方案是使用单个sed或使用单个awk。由于您已请求使用awk和sed解决方案,因此提供此功能。另外考虑您的实际数据将与示例Input_file相同。
awk -F, '{print $2,$3}' Input_file | sed 's/\([^ ]*\)\([^-]*\)-\([^-]*\)-\([^-]*\)/\1 \2 \3 \4/'
输出如下。
example-string super example string