LINUX.ORG.RU

Первый символ первой колонки:

awk '{print substr ($1, 0, 1)}'

Для каждого поля, наверно, придется цикл делать, типа так (для трех колонок):

awk '{for (i=1;i<=3;i++) printf "%s ",substr ($i, 0, 1)}'
alozovskoy ★★★★★ ()
Последнее исправление: alozovskoy (всего исправлений: 1)
Ответ на: комментарий от alozovskoy
`substr(STRING, START, LENGTH)'
     This returns a LENGTH-character-long substring of STRING, starting
     at character number START.  The first character of a string is
     character number one.  For example, `substr(«washington», 5, 3)'
     returns `«ing»'.

Т.ч. таки substr(..., 1, ...) ;)

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie
$ echo 'foo bar ololo' | awk '{print substr($1,1,1)}'
f

$ echo 'foo bar ololo' | awk '{print substr($1,0,1)}'
f

Не вижу разницы. Но привык что в программировании считают с нуля.

alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

Разницы не видишь, а в чужой монастырь со своим уставом лезешь. ;)

Читай лучше документацию, а не «как привык».

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

Ты то ОП-пост не прочитал, а мне какую-то документацию на басурманском предлагаешь.

У меня есть строки, awk даёт мне нужное поле, надо вывести первый символ каждого поля.

alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

Ты то ОП-пост не прочитал

Кто бы говорил, а?

У меня есть строки, awk даёт мне нужное поле, надо вывести первый символ каждого поля.
надо вывести первый символ каждого поля.
первый

Не нулевой, не.

Zmicier ★★★★★ ()
Ответ на: комментарий от alozovskoy

В awk - все массивы начинаются с 1. И к слову NF - количество полей

Silerus ★★ ()
Ответ на: комментарий от Zmicier

Ну я потом таки дополнил.

Не нулевой, не.

awk '{print $1}[0]'

(как нулевой элемент массива).

Не, ну конечно разрабы awk сделали вполне логично, везде же (в любом ЯП) у нас первый элемент массива имеет номер 1, чо я правда. Ну это же всем очевидно.

alozovskoy ★★★★★ ()
Ответ на: комментарий от Silerus

В awk - все массивы начинаются с 1.

ARGV — с нуля.

Zmicier ★★★★★ ()
Ответ на: комментарий от alozovskoy

Не, ну конечно разрабы awk сделали вполне логично, везде же (в любом ЯП) у нас первый элемент массива имеет номер 1, чо я правда.

Вы так всегда — даже по самой ерунде вместо того, чтобы признать, что маханули немного, закапываетесь все дальше и дальше? Тяжело же вам по жизни, наверное.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Ну учитывая, что пользовательские массивы в awk - это мапы, можно сказать что ARGV - исключение из правил. А так да, признаю, задел лишнего.

Silerus ★★ ()
Ответ на: комментарий от alozovskoy

в любом ЯП

Вы видели слишком мало ЯП, чтобы так голословно копать себе яму. ж)

beastie ★★★★★ ()
Ответ на: комментарий от alozovskoy

Не вижу разницы.

Да, кстати, если очень хочется увидеть, возьмите «живой» диск с Убунтой. Там должно быть так:

$ awk '{ print substr ($1, 0, 1) }' <<< 'foo'


$ awk '{ print substr ($1, 1, 1) }' <<< 'foo'
f

$ awk -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 2)
Ответ на: комментарий от Zmicier

возьмите искоробочную Убунту

Винду не взять?

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 9.0 (stretch)
Release:	9.0
Codename:	stretch

$ awk -W version
GNU Awk 4.1.4, API: 1.1 (GNU MPFR 3.1.5, GNU MP 6.1.2)
Copyright (C) 1989, 1991-2016 Free Software Foundation.

This program is free software; <...>

$ awk '{ print substr ($1, 0, 1) }' <<< 'foo'
f

И прошу прощения у многоуважаемой публики ITT что такое беспонтовое днище как я забрело в ваш тред. Постараюсь впредь не допускать такого.

alozovskoy ★★★★★ ()

Вот это легаси говнина. Альтернатив полно, нечего себя мучать.

anonymous ()
Ответ на: комментарий от anonymous

Альтернатив полно

Кстати, да. Раз уж вопросу назначена метка [bash]:

$ cat ./natnat
#!/bin/bash

while read -ra words; do
    for word in "${words[@]}"; do
        printf '%c ' "${word:0:1}"
    done
    printf '\n'
done

$ ./natnat << EOF
> foo bar baz
> quux
> EOF
f b b 
q 
Zmicier ★★★★★ ()
Ответ на: комментарий от alozovskoy

И эта пральна ;) Но по делу паддержу Beastie, ЯП много, и зеро многим мозолил...

vombat ()

Всем большое спасибо, заработало!

NatNat ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.