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