[英]How Can I Perform Awk Commands Only On Certain Fields
我正在使用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
上執行sed命令,而$2
保持原狀? 稍后我只是擔心如果行不匹配,數據可能會對齊。
請注意:我需要保留SED命令的管道。 我只是使用了一個簡單的示例,但在那之后我也最終運行了許多命令。
嘗試:
$ 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
雖然最好的解決方案是使用單個sed或單個awk。 由於您已請求使用awk和sed解決方案,因此請提供此功能。 同樣考慮到您的實際數據將與所示的示例Input_file相同。
awk -F, '{print $2,$3}' Input_file | sed 's/\([^ ]*\)\([^-]*\)-\([^-]*\)-\([^-]*\)/\1 \2 \3 \4/'
輸出如下。
example-string super example string
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.