簡體   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