Если поля разделены одним пробелом, а не любой последовательностью пустых символов, то if
1 2 4 5 6 7
- это строка с 7-м полем, но без третьего поля:
awk -F '[ ]' '$7 != ""' < file > final_output
[]
- регулярное выражение что соответствует пробелу. Мы не используем -F ''
как одиночный пробел, поскольку разделитель полей имеет особое значение (дает поведение разделения полей по умолчанию, когда любая последовательность из одного или нескольких пустых символов действует как один разделитель и начальные и конечные пробелы игнорируются).
Учитывая ваш пример выше, если вы можете быть уверены, что всегда есть 6 каталогов, вы можете поменять местами два последних, сделав что-то вроде этого:
find stats -mindepth 5 -maxdepth 5 -type d \ # (Or some other way of generating your list of directories)
| while read dir
do
mv -v "$dir" "$(echo $dir | awk -F '/' '{ print $1"/"$2"/"$3"/"$4"/"$6"/"$5 }')"
done
Бросьте echo
перед mv
, чтобы сначала проверить это.
Если вы не можете подсчитать количество каталогов, я уверен, что есть более универсальный способ просто сделать "поменять местами два последних", но не знаю точно.