Коэффициент Mawk не работает [дубликат]

Я нашел эту страницу после выполнения некоторых упражнений с образцами и с тем же самым загадкой.

============== Я перешел от этого кода в качестве примера ===============

public static void main(String[] args) throws IOException {

    Map wordMap = new HashMap();
    if (args.length > 0) {
        for (int i = 0; i < args.length; i++) {
            countWord(wordMap, args[i]);
        }
    } else {
        getWordFrequency(System.in, wordMap);
    }
    for (Iterator i = wordMap.entrySet().iterator(); i.hasNext();) {
        Map.Entry entry = (Map.Entry) i.next();
        System.out.println(entry.getKey() + " :\t" + entry.getValue());
    }

====================== Этот код ========================

public static void main(String[] args) throws IOException {
    // replace with TreeMap to get them sorted by name
    Map<String, Integer> wordMap = new HashMap<String, Integer>();
    if (args.length > 0) {
        for (int i = 0; i < args.length; i++) {
            countWord(wordMap, args[i]);
        }
    } else {
        getWordFrequency(System.in, wordMap);
    }
    for (Iterator<Entry<String, Integer>> i = wordMap.entrySet().iterator(); i.hasNext();) {
        Entry<String, Integer> entry =   i.next();
        System.out.println(entry.getKey() + " :\t" + entry.getValue());
    }

}

================ ================================================== =============

Это может быть безопаснее, но потребовалось 4 часа, чтобы одурачить философию ...

2
задан Nils-o-mat 5 December 2013 в 09:36
поделиться

2 ответа

Попробуйте

awk --re-interval -F '[[:blank:]]{1,}' '{printf ("%s ", $2)}' list

--re-interval

Разрешить интервальные выражения (см. Операторы Regexp) в регулярных выражениях. Это поведение gawk по умолчанию. Тем не менее, эта опция остается как для обратной совместимости, так и для использования в сочетании с опцией --traditional.

6
ответ дан devnull 22 August 2018 в 06:31
поделиться
  • 1
    Хорошо, это работает ... Странно, но верно. Огромное спасибо! – Nils-o-mat 5 December 2013 в 09:45
  • 2
    --posix также может работать. gnu awk не работает по умолчанию с interval expression, вам нужно сказать ему об этом. – Jotne 5 December 2013 в 09:46
  • 3
    Да, это тоже работает. – Nils-o-mat 5 December 2013 в 09:47
  • 4
    Приятно, что он работает. Я раньше не видел использования interval expression в field separator. – Jotne 5 December 2013 в 09:57
  • 5
    Если это поведение по умолчанию gawk, почему его нужно явно указывать. Bugaboo. – Kaz 5 December 2013 в 10:04

Вы используете Gawk, который находится до фиксации в ноябре 2010 года, найденный git bisect.

http://git.savannah.gnu.org/cgit/gawk.git / commit /? id = 40b3741f63c19e38077d57f4ce4737916ec5073e

Изменение действительно зависит от поведения по умолчанию относительно интервалов, которые становятся по умолчанию (как это требует POSIX).

Похоже, что опция --re-interval отменяется только для использования с --traditional; т.е. если функция --traditional включена, поддержка {m,n} исчезает, но может быть выборочно возвращена с помощью --re-interval.

В вашей версии {m,n} непризнан по умолчанию, с помощью или без --traditional. Это верно до этой фиксации:

commit 00ef0423acd97cb964a2bae54c93a03a8ab50e5e
Author: Arnold D. Robbins <arnold@******>
Date:   Fri Jul 16 14:55:10 2010 +0300

    Move to 3.1.8.

, и вы все еще находитесь на 3.1.5.

4
ответ дан Kaz 22 August 2018 в 06:31
поделиться
  • 1
    Спасибо за ваш ответ. Должен признаться, что я не совсем понимаю все, что вы здесь пишете. Единственное, что я хотел бы добавить, это то, что я не являюсь администратором упомянутой системы, поэтому я не могу обновить gawk. – Nils-o-mat 6 December 2013 в 12:13
  • 2
    @ Nil-o-mat. Все это означает, что язык awk изменился. Однажды это была программа, работающая в Unix-системах. Наряду с Unix, он менялся с годами и стал стандартизован POSIX. Это создает проблему, что некоторые старые awk-программы нуждаются в определенных старых поведеньях, или они ломаются. Например, некоторая программа может зависеть от того, что символ { не является особым в регулярном выражении. POSIX говорит, что все awk-регулярные выражения представляют собой расширенные регулярные выражения (ERE), в которых { является живым. Итак, GNU Awk пытается удовлетворить оба требования каким-то образом комбинацией значений по умолчанию, переопределяемых с опциями. – Kaz 7 December 2013 в 08:02
  • 3
    Хм, это имеет смысл. Так что в основном это проблема устаревания ... Спасибо, что дал мне какой-то контекст. Всегда старайтесь знать. – Nils-o-mat 8 December 2013 в 00:47
Другие вопросы по тегам:

Похожие вопросы: