[英]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
。 这里是纯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.