Вот довольно загадочный 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
Либо я упускаю что-то важное, либо простейшее решение кажется слишком очевидным :почему бы не использовать обычный канал?
xkb-switch -W | cut -c1-2
Это напечатает первые два символа каждой строки, которую выводит xkb-switch
, как только выводится разрыв строки.