简体   繁体   English

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

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

Input:输入:

"prefix_foo,prefix_bar"

Expected Output:预期 Output:

foo
bar

This is what I've so far.这就是我到目前为止。

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

I'm unable to figure out how to print foo and bar separated by a newline.我无法弄清楚如何打印 foo 和 bar 用换行符分隔。 Thanks in advance!提前致谢!

EDIT:编辑:

  • Length of input is unknown so there can be more than 2 words separated by comma.输入的长度未知,因此可以有两个以上的单词,用逗号分隔。
  • This question is more towards learning awk language, not alternative gnu utils.这个问题更倾向于学习 awk 语言,而不是替代 gnu utils。

You may not need awk for this.为此,您可能不需要awk Here is pure bash solution:这里是纯bash解决方案:

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

foo
bar

Here is one liner gnu sed for the same:这是一个相同的衬里gnu sed

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

foo
bar

EDIT: 2nd solution Adding more generic solution here as per OP's comments, this will Look for every field and check if its having prefix then it will print that column's 2nd part(after _ one).编辑:第二个解决方案根据 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=""
}'

To print output field values in new line try:要在新行中打印 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]
    }
  }
}
'


1st solution: For simple case(specific to shown samples) could you please try following.第一种解决方案:对于简单的案例(特定于显示的示例),您能否尝试以下操作。

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

OR或者

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

Just trying out awk只是尝试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