Если Вы завершаете установку с make install
(или эквивалентный), только последний необходим. Идея состоит в том, что каталог сборки содержит любые файлы, были созданы во время процесса сборки (включая объектные файлы, от которых библиотеки и двоичные файлы связаны). Каталог, к которому Вы устанавливаете приложение, содержит только, что необходимо, чтобы это работало. Это однако не должно быть подмножеством каталога сборки - он может содержать некоторые файлы данных, которые включены в источник tarball, но не обязательно скопированы в каталог сборки (хотя сила быть).
Вообще говоря, что заканчивается в целевом каталоге для установки, обычно, что упаковывается в регулярных пакетах распределения.
Используя tr
, замените каждый повторяющийся символ пробела () на один символ новой строки (
\n
).
tr -s ' ' '\n'< infile > outfile
1 2 3 4 1 a # a b c d --> 2 b $ # $ @ % 3 c @ 4 d %
С помощью awk
мы могли бы сделать:
awk '{ for (i=1; i<=NF; i++) RtoC[i]= (RtoC[i]? RtoC[i] FS $i: $i) }
END{ for (i in RtoC) print RtoC[i] }' infile
Это соединяет каждый один и тот же записанный номер позитон вместе и в END
печатает результат, который будет первой строкой в первом столбце, второй строкой во втором и т.д. Конечно, входной файл ограничен вашим объемом памяти.
Вы могли бы просто сделать это через GreeP. По умолчанию GREP, распечатает совпадение в отдельной новой строке.
grep -oP '\S+' infile > outfile
или
grep -o '[^[:space:]]\+' infile > outfile
Также можно воспользоваться командой fmt
:
~$ cat f
PAPER TEAM MANISH NISHA GARIMA JYOUTI
~$ fmt -1 f
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
с GNU Datamash :
$ datamash -W transpose <file
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
kill -0
(или его более портативный вариант POSIX kill -s 0
) проходит через движение передачи сигнала, но фактически не посылает его. Это особенность базового C API , которую команда оболочки предоставляет простым способом.
kill -s 0 -- «$ pid»
таким образом проверяет, существует ли выполняющийся процесс с заданным PID (или PGID, если $ pid
отрицательный), и будет ли текущий процесс иметь разрешение на его отправку (любой из процессов в группе процессов в случае отрицательного $ pid
) сигналом. В основном это способ проверить, жив ли процесс (или группа процессов).
Имейте в виду, что даже если существует запущенный процесс с ожидаемым PID и разрешениями, это не обязательно тот процесс, который вы ожидаете. Возможно, что процесс, который вы ожидаете, умер раньше, и его PID был повторно использован для несвязанного процесса. Правильный способ мониторинга процессов заключается в том, чтобы позволить их родителю сделать это - PID процесса не используется повторно до тех пор, пока его родитель не признает его смерть (поэтому зомби существуют), так что родитель процесса может надежно идентифицировать своих детей по своему PID.
-121--6402-Python
В python я хотел бы, чтобы ниже,
#!/usr/bin/python
import re
import sys
file = sys.argv[1]
with open(file, 'r') as f:
for line in f:
print ' '.join(re.findall(r'(?<!\d)\d{4}(?!\d)', line))
Сохраните приведенный выше скрипт как script.py
, а затем запустите его, применив приведенную ниже команду на терминале.
python script.py file
Пример:
$ cat file
9228 Hello 8473 World War 1 1914-1918 Hello 8391 World War 2 1939-1945
foo1234bar 0x1234ff 1.1234
$ python f.py file
9228 8473 1914 1918 8391 1939 1945
1234 1234 1234
Perl
Через команду perl's s///
. Это команда поиска и замены.
perl -pe 's/(?<!\d)\d{4}(?!\d)(*SKIP)(*F)|.+?(?=\d{4}|$)/ /g;s/^ +| +$//g' file
Пример:
$ cat file
9228 Hello 8473 World War 1 1914-1918 Hello
foo1234bar 0x1234ff 1.1234
$ perl -pe 's/(?<!\d)\d{4}(?!\d)(*SKIP)(*F)|.+?(?=\d{4}|$)/ /g;s/^ +| +$//g' file
9228 8473 1914 1918
1234 1234 1234
Прочитайте здесь , чтобы узнать больше о глаголе PCRE (* SKIP) (* F)
.
Это также можно сделать с помощью sed
:
$ sed -e 's/ */\n/g' file1 > file2
ПРИМЕЧАНИЕ: Не обрабатывает ситуацию, когда слова содержат места.
Используя awk
, в качестве разделителя записей (строк) устанавливаем выходной разделитель полей (OFS
) (RS
):
awk '{OFS=RS;$1=$1}1' file > file2
Использование для Loop
:
for val in `cat file1` ; do echo $val >> file2; done;
Вы также можете попробовать использовать sed
$ sed -i.bak s@' '@'\n'@g infile.txt
Обратите внимание, что я использую @
в качестве разделителя для операции подстановки .
Это также создаст файл резервной копии. Если вам не нужна резервная копия, удалите .bak
$ sed -i s@' '@'\n'@g infile.txt
Версия Python:
python -c "import sys;lines=[l.replace(' ','\n') for l in sys.stdin.readlines()];print(''.join(lines))" < input.txt > output.txt
Здесь используется перенаправление <
на stdin Python из input.txt
и запись в output.txt
с использованием перенаправления >
.Сам однострочник считывает все строки из stdin
в список строк, где все пробелы заменяются символами новой строки, и мы перестраиваем весь текст с помощью функции .join ()
.
Альтернативный подход, позволяющий избежать замены нескольких последовательных пробелов на новые строки, заключается в использовании .split ()
для разбиения строки на список слов. Таким образом мы можем гарантировать, что каждое слово отделяется только одной новой строкой
python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt > output.txt
Используя xargs
, (, украденные из ответа souravc):
xargs -n 1 < File1 > File2
Или, если необходимо какое-либо незначительное переформатирование, используйте printf
форматные строки, которые могут понадобиться:
xargs printf '%s\n' < File1 > File2
Мое решение было бы:
#!/bin/bash
cols=$(head -1 file.txt | wc -w)
for i in $(seq 1 $cols); do
cut -d ' ' -f$i file.txt | tr '\n' ' ' | sed s'/.$//'
echo
done