Как «вставить» два файла без записи в новый файл?

Чтобы создать менеджер сеанса -/etc/alternatives/x -по умолчанию, необходимо применить альтернативы обновления -и зарегистрировать оконные менеджеры, которые не делают этого по умолчанию.

sudo update-alternatives --install "/usr/bin/x-session-manager" "x-session-manager" "/usr/bin/i3" 2

Тогда:

sudo update-alternatives --config x-session-manager
0
02.09.2020, 08:38
5 ответов
for f in /user/home/file_*; do
    printf '%s\t%s\n' "$(sed -n '3{p;q;}' "$f")" "$(grep 'word' "$f")"
done > combined

На случай, если файлы большие, я добавил команду quit в sed.

0
18.03.2021, 23:08

Извините, возможно, я неправильно понял вопрос. Может быть таким же, какhttps://stackoverflow.com/questions/31546680/how-to-pipe-grep-output-to-paste-input

Команда «вставить» принимает 2 или более файлов, а не потоки, сохраняя структуры столбцов и размещая их слева направо в объединенном файле. Для объединения столбцов слева направо следующая ссылка может быть интересно :https://www.geeksforgeeks.org/paste-command-in-linux-with-examples/в разделе «2. Комбинация с другими командами», где говорится о совмещении с «вырезать». Если файл1 имеет 2 столбца, разделенных вкладками; файл2 имеет 1 столбец; вы можете делать последовательные каналы вырезания и вставки:

cut -d\      -f1-2 file1 | paste - file2 | cut -d\   -f1-3 | paste - file3

где невидимый символ после -d\ является вкладкой (ctl -V вкладка в командной строке, на самом деле табуляция может быть разделителем по умолчанию для «вырезать», как и для «вставить» )и дефис после каждой «вставки» — это положение столбцов конвейера -в потоке.

или так, поскольку все столбцы сохраняются:

cut -d\      -f1-2 file1 | paste - file2 | paste - file3

Если вы хотите, чтобы весь вывод второго файла находился под выводом первого файла тогда исходное предложение с подоболочками

( source cmdLIST1.csh ; source cmdLIST2.csh ) > combinedOUTPUT.txt

могло сработать.

Ответ Чай, кажется, работает в «bash» и «zsh», но не в «tcsh» и, вероятно, самый простой.

1
18.03.2021, 23:08

Попробуйте это

$ paste <(for pathname in /user/home/file_*; do cat "$pathname" | sed -n '3p'; printf "\n"; done) <(for pathname in /user/home/file_*; do cat "$pathname" | grep "word"; printf "\n"; done)

Я думаю, что за кулисами оболочка будет использовать некоторые временные файлы.

0
18.03.2021, 23:08

Думаю, вы ищете

for pathname in /user/home/file_*; do
    cat "$pathname" | sed -n '3p'; printf"\n";
done > user/home/combined

for pathname in /user/home/file_*; do
    cat "$pathname" | grep "word";
    printf"\n";
done >> user/home/combined

Первый шаг >создаст файл, а второй шаг добавит к файлу >>.

0
18.03.2021, 23:08

Одним из способов может быть вызов awk, чтобы попросить его напечатать 3-ю строку и/или строку, содержащую слово. Результатом является слияние -, вставленное по 2 строки за раз и записанное в файл с именем Combined. Обратите внимание, что это предполагает, что слово встречается один раз.

$ for pathname in /user/home/file_*; do
    awk '/word/;NR==3' < "$pathname" 
  done | paste  - - > combined
1
18.03.2021, 23:08

Теги

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