Как преобразовать от строки до столбца?

У меня есть .txt файл с числами, заказанными как это (на той же строке):

106849_01373    106849_01967    106850_00082    23025.7_01059   

Я хотел бы преобразовать их как этот:

106849_01373
106849_01967
106850_00082
23025.7_01059

Я понятия не имею который команда использовать. Кто-то может помочь мне с этим?

10
задан 21 March 2016 в 05:52

6 ответов

Вот один с xargs

xargs -n1 < file.txt

Демонстрация:

$ cat file.txt                    
106849_01373    106849_01967    106850_00082    23025.7_01059 

$ xargs -n1 < file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
4
ответ дан 23 November 2019 в 04:20

Довольно легкий с tr:

tr -s '[:blank:]' '\n' <file.txt

Пример:

% cat file.txt                    
106849_01373    106849_01967    106850_00082    23025.7_01059   
106849_01373    106849_01967    106850_00082    23025.7_01059   
106849_01373    106849_01967    106850_00082    23025.7_01059   
106849_01373    106849_01967    106850_00082    23025.7_01059   

% tr -s '[:blank:]' '\n' <file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
15
ответ дан 23 November 2019 в 04:20

ответ heemayl является способом пойти, однако вот альтернативный Perl использования:

perl -lane '$,="\n"; print(@F)' file.txt
  • -l: включает автоматическую заканчивающую строку обработку. Это имеет два отдельных эффекта. Во-первых, это автоматически громко жует $ / (входной разделитель записей) при использовании с-n или-p. Во-вторых, это присваивает $\\(выходной разделитель записей), чтобы иметь значение octnum так, чтобы любые операторы печати имели тот разделитель включенным назад. Если octnum опущен, $наборов \\к текущему значению $/.
  • -a: включает режим авторазделения при использовании с-n или-p. Неявная команда разделения к массиву @F сделана как первая вещь в неявном цикле с условием продолжения, произведенном-n или-p.
  • -n: Perl причин для принятия следующего цикла вокруг программы, которая заставляет его выполнить итерации по аргументам имени файла несколько как sed-n или awk:

    LINE:
      while (<>) {
          ...             # your program goes here
      }
    
  • -e: может использоваться для ввода одной строки программы;

  • $,="\n": устанавливает выходного разделителя полей на новую строку;
  • print(@F): печатает поля, разделенные выходным разделителем полей.
% cat file.txt
106849_01373    106849_01967    106850_00082    23025.7_01059 
% perl -lane '$,="\n"; print(@F)' file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
2
ответ дан 23 November 2019 в 04:20

AWK подход. В основном изменяя выходной разделитель для полей и цикличное выполнение. Тестовый файл является Вашим примером, вставляемым много раз с ENDLINE в конце

$ awk 'BEGIN{OFS="\n"}{for(i=1;i<=NF;i++) print $i}' some_data 
106849_01373
106849_01967
106850_00082
23025.7_01059
ENDLINE
106849_01373
106849_01967
106850_00082
23025.7_01059
ENDLINE
106849_01373
106849_01967
106850_00082
23025.7_01059
ENDLINE
1
ответ дан 23 November 2019 в 04:20

Используя sed:

sed -e 's/\s\{1,\}$//' -e 's/\s\+/\n/g' file.txt > split_file.txt
1
ответ дан 23 November 2019 в 04:20

Я просто добавляю решение Python для забавы:

python3 -c 'import sys; f=open(sys.argv[1]); print(*f.read().split(),sep="\n")' mytestfile

Эта команда запускает короткий скрипт Python 3 в 'одинарных кавычках' с именем файла, которое Вы хотите преобразовать как аргумент в конце. Синтаксис похож на это:

python3 -c 'PYTHON_COMMAND_OR_1-LINE-SCRIPT' ARGUMENTS

1 сценарий строки, который мы используем, является этим (расширенный до нескольких строк для ясности):

import sys
f=open(sys.argv[1])
print(*f.read().split(),sep="\n")

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

$ cat mytestfile 
106849_01373    106849_01967    106850_00082    23025.7_01059   
106849_01373    106849_01967    106850_00082    23025.7_01059   
106849_01373    106849_01967    106850_00082    23025.7_01059   
106849_01373    106849_01967    106850_00082    23025.7_01059   

$ python3 -c 'import sys; f=open(sys.argv[1]); print(*f.read().split(),sep="\n")' mytestfile
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
1
ответ дан 23 November 2019 в 04:20

Другие вопросы по тегам:

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