簡體   English   中英

如何僅在某些字段上執行Awk命令

[英]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

這個怎么運作

  1. -F,

    這告訴awk使用逗號作為字段分隔符。

  2. gsub(/-/," ",$3)

    這將替換所有的-在現場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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM