Шаблон -path
заканчивается косой чертой. Ни один путь, который проверяет find
, никогда не будет заканчиваться косой чертой, поэтому шаблон никогда не будет соответствовать чему-либо.
Чтобы удалить любой каталог с именем .aaa
и любой каталог с rc
в его имени:
find -L /students/projects/myname \
-type d '(' -name '.aaa' -o -name '*rc*' ')' -prune -o -print
Смотреть только на путь*/*/class_project/*/*/pikachu/*/*/bambi/bambi.txt
:
find -L /students/projects/myname \
-type d '(' -name '.aaa' -o -name '*rc*' ')' -prune -o \
-path '*/*/class_project/*/*/pikachu/*/*/bambi/bambi.txt' -print
Это предполагает, что bambi.txt
находится в
/students/projects/myname/*/*/class_project/*/*/pikachu/*/*/bambi/bambi.txt
Обратите внимание на кавычки шаблонов в команде find
. Без кавычек оболочка попытается расширить шаблоны до списков путей перед вызовом find
, что может привести к путанице find
или, в некоторых оболочках, к ошибке.
$ awk '(FNR-1)%4 == 0 { getline add <"add.txt"; print add }; 1' data.txt
2001-01-01 00:00:00 42 1
-500 11.822788
-400 12.006394
-350 12.287062
-300 12.793395
2001-01-02 00:00:00 42 1
-500 11.823597
-400 12.008012
-350 12.287062
-300 12.794204
2001-01-03 00:00:00 42 1
-500 11.826023
-400 12.011247
-350 12.291915
-300 12.800675
2001-01-04 00:00:00 42 1
-500 11.827641
-400 12.013674
-350 12.295959
-300 12.805528
2001-01-05 00:00:00 42 1
-500 11.830067
-400 12.016100
-350 12.300003
-300 12.811998
Это использует awk
для чтения и вывода каждой строки файла data.txt
. Перед выводом любой 4-й строки считывается и выводится строка из файла add.txt
.
Не выполняется проверка правильности чтения данных, считанных из add.txt
. (Если файл слишком короткий, приведенный выше код будет повторять последнюю строку ).
Использованиеpaste
:
$ paste -d '\n' add.txt - - - - <data.txt
2001-01-01 00:00:00 42 1
-500 11.822788
-400 12.006394
-350 12.287062
-300 12.793395
2001-01-02 00:00:00 42 1
-500 11.823597
-400 12.008012
-350 12.287062
-300 12.794204
2001-01-03 00:00:00 42 1
-500 11.826023
-400 12.011247
-350 12.291915
-300 12.800675
2001-01-04 00:00:00 42 1
-500 11.827641
-400 12.013674
-350 12.295959
-300 12.805528
2001-01-05 00:00:00 42 1
-500 11.830067
-400 12.016100
-350 12.300003
-300 12.811998
Здесь я прошу paste
создать записи со строкой из add.txt
в качестве первого поля, за которыми следуют четыре строки из data.txt
в качестве следующих четырех полей. С помощью -d '\n'
я устанавливаю символ для использования в качестве разделителя поля на символ новой строки.
ИМХО, самый простой подход — просто прочитать add.txt в массив, а затем вывести строку из массива через каждые 4 строки data.txt:
$ awk 'NR==FNR{a[NR]=$0; next} FNR%4==1{print a[++c]} 1' add.txt data.txt
2001-01-01 00:00:00 42 1
-500 11.822788
-400 12.006394
-350 12.287062
-300 12.793395
2001-01-02 00:00:00 42 1
-500 11.823597
-400 12.008012
-350 12.287062
-300 12.794204
2001-01-03 00:00:00 42 1
-500 11.826023
-400 12.011247
-350 12.291915
-300 12.800675
2001-01-04 00:00:00 42 1
-500 11.827641
-400 12.013674
-350 12.295959
-300 12.805528
2001-01-05 00:00:00 42 1
-500 11.830067
-400 12.016100
-350 12.300003
-300 12.811998
Если GNU sed
является вариантом, особенно для MacOS, мы можем запустить следующий код sed. Ключевыми здесь являются команда R и команда ~, являющиеся дополнениями gnu.
~заставит sed специально просматривать каждую четвертую строку, для остальных он будет передаваться на стандартный вывод. R должен взять одну строку из add.txt и смешать ее со строкой data.txt.
$ sed '
1~4!b
R add.txt
$!N
' data.txt