awk + ​​从第三个字段打印直到行尾,每个单词用一个空格

awk + ​​从第三个字段打印直到行尾,每个单词用一个空格

如何打印所有 $Organs 单词(从第三个字段开始),每个 Organ 之间留一个空格?我的问题是每个 $Organ 参数都有不同的 Organs 编号,所以我无法猜测最后一个字段编号。我需要 awk 语法,打印从第三个字段到最后一个字段的 $Organs 参数,单词之间留一个空格。

Organs="a bb c ddd ee ff rr ff"
Organs="1 2    3 4 5   6 7 8 9 10 11 12 13 14 15 16 20 21 22"
Organs="I need to lern awk I hope I will do the best"
Organs="I need help"


echo $Organs| awk '{print $3" "$4" "$5" "$6 .......?}'

答案1

% echo $Organs | awk '{              \
       for (i = 3; i <= NF; i++) {   \
          printf("%s ", $i);         \
       }                             \
       printf("\n") }'

答案2

尝试这样的操作:

for (i = 3; i <= NF; i++)
    printf("%s ", $i);
print ""

NF 为您提供行中的字段数。请查看此常见问题解答:

同意更适合 stackoverflow.com。

答案3

awk '{
  $1=$2=""  # suppress first two fields
  out=substr($0, 3)  # suppress the two leading occurrences of OFS that remain
  print out
}'

这假设 OFS 计算结果为单个空格,这是其默认值。

此解决方案可能比其他解决方案快一点。但可以想象,它也可能更慢:这取决于重新分配字段和重新解析$0(如此解决方案一样)还是实现 awk 循环(如其他解决方案一样)更快。但无论哪种方式,您都不会注意到速度差异。

相关内容