Добавление/вставка разных текстов в определенные интервалы одного и того же текстового файла?

Шаблон -pathзаканчивается косой чертой. Ни один путь, который проверяет find, никогда не будет заканчиваться косой чертой, поэтому шаблон никогда не будет соответствовать чему-либо.

Чтобы удалить любой каталог с именем .aaaи любой каталог с rcв его имени:

find -L /students/projects/myname \
    -type d '(' -name '.aaa' -o -name '*rc*' ')' -prune -o -print

Смотреть только на путь*/*/class_project/*/*/pikachu/*/*/bambi/b‌​ambi.txt:

find -L /students/projects/myname \
    -type d '(' -name '.aaa' -o -name '*rc*' ')' -prune -o \
    -path '*/*/class_project/*/*/pikachu/*/*/bambi/b‌​ambi.txt' -print

Это предполагает, что bambi.txtнаходится в

/students/projects/myname/*/*/class_project/*/*/pikachu/*/*/bambi/b‌​ambi.txt

Обратите внимание на кавычки шаблонов в команде find. Без кавычек оболочка попытается расширить шаблоны до списков путей перед вызовом find, что может привести к путанице findили, в некоторых оболочках, к ошибке.

2
25.08.2020, 10:47
3 ответа
$ 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'я устанавливаю символ для использования в качестве разделителя поля на символ новой строки.

6
18.03.2021, 23:10

ИМХО, самый простой подход — просто прочитать 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
1
18.03.2021, 23:10

Если GNU sedявляется вариантом, особенно для MacOS, мы можем запустить следующий код sed. Ключевыми здесь являются команда R и команда ~, являющиеся дополнениями gnu.

~заставит sed специально просматривать каждую четвертую строку, для остальных он будет передаваться на стандартный вывод. R должен взять одну строку из add.txt и смешать ее со строкой data.txt.

$ sed '
    1~4!b
    R add.txt
    $!N
' data.txt
2
18.03.2021, 23:10

Теги

Похожие вопросы