Вы можете сделать это с помощью GNU find или другого find, который поддерживает -path
, но я не думаю, что это более элегантно.
find src \( -type f -executable ! -path 'src/*/*' -o -name '*.txt' \) \
-exec ln -fs {}. +
Вместо этого вы можете использовать zsh. Его квалификаторы glob более лаконичны, чем синтаксис find.
ln -sf src/*/*(N*.) src/**/*.txt.
awk '{if((NF==5) && ($2 == $4)){$7=$5;$5=$3;$6=$4;$3=11;$4=$2;print $0}else if ((NF==5) && ($1 == $3)){$7=$5;$5=$3;$6=$4;$4=5;$3=$1;print }else{print $0}}' filename
выход
3 1 11 1 10 1 6
9 4 11 4 2 4 1
9 2 11 2 2 2 1
2 4 2 5 2 2 2
9 4 9 2 9 1 2
$ awk 'NF==5{ if ($2==$4) $2 = $2 OFS 11 OFS $4; else if ($1==$3) $2 = $2 OFS $1 OFS 5 } 1' file
3 1 11 1 10 1 6
9 4 11 4 2 4 1
9 2 11 2 2 2 1
2 4 2 5 2 2 2
9 4 9 2 9 1 2
Вот команда awk в одной -строке, которая дает требуемый результат:
awk '{if (NF == 5 && $2 == $4 ){a=11; б=$2; выведите $1 " " $2 " " a " " b " " $3 " " $4 " " $5;} else if (NF == 5 && $1 == $3 ){c=$1; д=5; print $1 " " $2 " "c " "d " "$3 " " $4 " " $5;} else print $0}' пример _simple.txt