Обрезание вывода программы, работающей в цикле

Вот довольно загадочный awk:

awk '{for (i=1; i<=NF; i+=2) {printf "%s ", $(i + (NR > FNR))}; print ""}' file file

При первой обработке файла NR > FNRбудет равно false или 0.
При второй обработке файла NR > FNRбудет истинным или 1.


Для этого требуется один проход по файлу, но вы должны держать половину файла в памяти:

awk '
    {
        for (i=1; i<NF; i+=2) {
            printf "%s ", $i
            row[NR] = row[NR] $(i+1) " "
        }
        print ""
    }
    END {
        for (i=1; i<=NR; i++) print row[i]
    }
' file
1
14.09.2019, 13:28
1 ответ

Либо я упускаю что-то важное, либо простейшее решение кажется слишком очевидным :почему бы не использовать обычный канал?

xkb-switch -W | cut -c1-2

Это напечатает первые два символа каждой строки, которую выводит xkb-switch, как только выводится разрыв строки.

0
28.01.2020, 00:00

Теги

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