AWK, поменять местами слова в строке
Как поменять местами чётные и нечётные слова строке? Только начал изучать awk.
for(i = 1; i <= length(string); i++){
if(string[i] == " "){
if(count == 1){
count = 2;
}
else{
count = 1;
temp1 = ""; j = 0;
temp2 = ""; k = 0;
printf("%s %s", temp2, temp1);
}
}
else{
if(count == 1){
temp1[j] == string[i];
j = j + 1;
}
if(count == 2){
temp2[k] == string[i];
k = k + 1;
}
}
}
Это не работает, выдает ошибку: illegal reference to variable string.
Ответы (1 шт):
Автор решения: aleksandr barakin
→ Ссылка
главная допущенная ошибка — это попытка сделать посимвольный разбор строки, что чрезмерно усложняет реализацию. ведь программа awk сама отлично справляется с разбивкой строки на слова.
воспользовавшись этим её свойством, можно сделать, например, так:
{
s = $0 # на случай, если в строке ноль или одно слово, берём всю строку
if (NF > 1) { # если количество слов больше одного
s = $2" "$1 # начинаем с перестановки первого и второго слов
# цикл с третьего по последнее чётное слово с шагом два
for (n = 3; n <= (NF - NF % 2); n += 2) {
s = s" "$(n + 1)" "$n # добавляем два очередных слова
}
if (NF % 2 == 1) { # если количество слов нечётное
s = s" "$NF # добавляем последнее
}
}
# печатаем результат
print s
}
пример входного файла:
раз два три четыре пять шесть семь
восемь девять десять одиннадцать двенадцать тринадцать
четырнадцать
пятнадцать шестнадцать
семнадцать восемнадцать девятнадцать
результат его обработки:
два раз четыре три шесть пять семь
девять восемь одиннадцать десять тринадцать двенадцать
четырнадцать
шестнадцать пятнадцать
восемнадцать семнадцать девятнадцать