[英]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:编辑:
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.