繁体   English   中英

awk 使用换行符分隔列值打印 $0

[英]awk print $0 with newline separated column values

输入:

"prefix_foo,prefix_bar"

预期 Output:

foo
bar

这就是我到目前为止。

$ echo "PREFIX_foo,PREFIX_bar" | awk '/PREFIX_/{x=gsub("PREFIX_", ""); print $0 }'
foo,bar

我无法弄清楚如何打印 foo 和 bar 用换行符分隔。 提前致谢!

编辑:

  • 输入的长度未知,因此可以有两个以上的单词,用逗号分隔。
  • 这个问题更倾向于学习 awk 语言,而不是替代 gnu utils。

为此,您可能不需要awk 这里是纯bash解决方案:

s="prefix_foo,prefix_bar"
s="${s//prefix_/}"
s="${s//,/$'\n'}"
echo "$s"

foo
bar

这是一个相同的衬里gnu sed

sed 's/prefix_//g; s/,/\n/g' <<< "$s"

foo
bar

编辑:第二个解决方案根据 OP 的评论在此处添加更多通用解决方案,这将查找每个字段并检查其是否具有prefix ,然后它将打印该列的第二部分(在_一个之后)。

echo "prefix_foo,etc,bla,prefix_bar" | 
awk '
BEGIN{
  FS=OFS=","
}
{
  for(i=1;i<=NF;i++){
    if($i~/prefix/){
      split($i,array,"_")
      val=(val?val OFS:"")array[2]
    }
  }
  if(val){
    print val
  }
  val=""
}'

要在新行中打印 output 字段值,请尝试:

echo "prefix_foo,etc,bla,prefix_bar" | 
awk '
BEGIN{
  FS=OFS=","
}
{
  for(i=1;i<=NF;i++){
    if($i~/prefix/){
      split($i,array,"_")
      print array[2]
    }
  }
}
'


第一种解决方案:对于简单的案例(特定于显示的示例),您能否尝试以下操作。

awk -F'[_,]' '/prefix_/{print $2,$4}'  Input_file

或者

echo "prefix_foo,prefix_bar" | awk -F'[_,]' '/prefix_/{print $2,$4}'

只是尝试awk

 echo "PREFIX_foo,PREFIX_bar" | awk -F, -v OFS="\n" '{gsub(/PREFIX_/,""); $1=$1}1'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM