3

Как напечатать все слова $ Organs (из третьего поля) с одним пробелом между каждым органом? Моя проблема в том, что у каждого параметра $ 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 .......?}'

3 ответа3

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

Попробуйте что-то вроде этого:

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

NF дает вам количество полей в строке. Посмотрите на этот FAQ:

Согласитесь, лучше подходит для stackoverflow.com.

0
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, как это делают другие решения. Но в любом случае вы не заметите разницу в скорости.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .