Строки к преобразованию столбца файла

Если Вы завершаете установку с make install (или эквивалентный), только последний необходим. Идея состоит в том, что каталог сборки содержит любые файлы, были созданы во время процесса сборки (включая объектные файлы, от которых библиотеки и двоичные файлы связаны). Каталог, к которому Вы устанавливаете приложение, содержит только, что необходимо, чтобы это работало. Это однако не должно быть подмножеством каталога сборки - он может содержать некоторые файлы данных, которые включены в источник tarball, но не обязательно скопированы в каталог сборки (хотя сила быть).

Вообще говоря, что заканчивается в целевом каталоге для установки, обычно, что упаковывается в регулярных пакетах распределения.

15
19.09.2018, 19:45
11 ответов

Используя 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 печатает результат, который будет первой строкой в первом столбце, второй строкой во втором и т.д. Конечно, входной файл ограничен вашим объемом памяти.

20
27.01.2020, 19:49

Вы могли бы просто сделать это через GreeP. По умолчанию GREP, распечатает совпадение в отдельной новой строке.

grep -oP '\S+' infile > outfile

или

grep -o '[^[:space:]]\+' infile > outfile
8
27.01.2020, 19:49

Также можно воспользоваться командой fmt:

~$ cat f
PAPER  TEAM  MANISH NISHA GARIMA JYOUTI
~$ fmt -1 f
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
8
27.01.2020, 19:49

с GNU Datamash :

$ datamash -W transpose <file
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
7
27.01.2020, 19:49

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) .

-121--77532-

Это также можно сделать с помощью sed :

$ sed -e 's/  */\n/g' file1 > file2

ПРИМЕЧАНИЕ: Не обрабатывает ситуацию, когда слова содержат места.

6
27.01.2020, 19:49

Используя awk, в качестве разделителя записей (строк) устанавливаем выходной разделитель полей (OFS) (RS):

awk '{OFS=RS;$1=$1}1' file > file2
5
27.01.2020, 19:49

Использование для Loop :

for val in `cat file1` ; do echo $val >> file2; done;
2
27.01.2020, 19:49

Вы также можете попробовать использовать sed

$ sed -i.bak s@' '@'\n'@g infile.txt

Обратите внимание, что я использую @ в качестве разделителя для операции подстановки . Это также создаст файл резервной копии. Если вам не нужна резервная копия, удалите .bak

$ sed -i s@' '@'\n'@g infile.txt
0
27.01.2020, 19:49

Версия 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
0
27.01.2020, 19:49

Используя xargs, (, украденные из ответа souravc):

xargs -n 1 < File1 > File2

Или, если необходимо какое-либо незначительное переформатирование, используйте printfформатные строки, которые могут понадобиться:

xargs printf '%s\n' < File1 > File2
0
27.01.2020, 19:49

Мое решение было бы:

#!/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
0
27.01.2020, 19:49

Теги

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