Распечатать четные/нечетные строки в новом столбце

Распечатать четные/нечетные строки в новом столбце

У меня есть файл с X строками в одном столбце, и я хочу вывести каждую четную/нечетную строку в новый столбец. Возможно ли это в Linux или vimредакторе?

Например:

Входной файл:

RESOLUTION: 1.70
UNIT: MONOMERIC
RESOLUTION: 1.80
UNIT: DIMERIC
RESOLUTION: 2.50
UNIT: TRIMERIC
RESOLUTION: 2.20
UNIT: TETRAMERIC

Выходной файл, который мне нужен:

RESOLUTION: 1.70    UNIT: MONOMERIC
RESOLUTION: 1.80    UNIT: DIMERIC
RESOLUTION: 2.50    UNIT: TRIMERIC
RESOLUTION: 2.20    UNIT: TETRAMERIC

решение1

Попробуйте ниже.

$cat a.txt
RESOLUTION: 1.70
UNIT: MONOMERIC
RESOLUTION: 1.80
UNIT: DIMERIC
RESOLUTION: 2.50
UNIT: TRIMERIC
RESOLUTION: 2.20
UNIT: TETRAMERIC

$ cat a.txt | sed 'N;s/\n/ /g'
RESOLUTION: 1.70 UNIT: MONOMERIC
RESOLUTION: 1.80 UNIT: DIMERIC
RESOLUTION: 2.50 UNIT: TRIMERIC
RESOLUTION: 2.20 UNIT: TETRAMERIC

решение2

Предположим, что данные находятся в файле z1, тогда

paste -sd "\t\n" z1

будет производить:

RESOLUTION: 1.70        UNIT: MONOMERIC
RESOLUTION: 1.80        UNIT: DIMERIC
RESOLUTION: 2.50        UNIT: TRIMERIC
RESOLUTION: 2.20        UNIT: TETRAMERIC

В такой системе как:

OS, ker|rel, machine: Linux, 3.16.0-7-amd64, x86_64
Distribution        : Debian 8.11 (jessie) 
bash GNU bash 4.3.30
paste (GNU coreutils) 8.23

С наилучшими пожеланиями... ура, drl

решение3

Вы ищете в правильном месте (awk или sed).

sedдостаточно, если используется gnu sed.

видетьhttps://www.gnu.org/software/sed/manual/sed.html#Числовые-адреса

4.2 Выбор строк по номерам

first~step Это расширение GNU соответствует каждой строке stepth, начиная со строки first. В частности, строки будут выбраны, когда существует неотрицательное n, такое, что текущий номер строки равен first + (n * step). Таким образом, можно использовать 1~2 для выбора нечетных строк и 0~2 для четных строк; чтобы выбрать каждую третью строку, начиная со второй, нужно использовать '2~3'; чтобы выбрать каждую пятую строку, начиная с десятой, нужно использовать '10~5'; а '50~0' — это просто неясный способ сказать 50.

Следующие команды демонстрируют использование адреса шага:

$ seq 10 | sed -n '0~4p' 4 8

$ seq 10 | sed -n '1~3p' 1 4 7 10

решение4

Если в нечетных строках есть конечный пробел, вы можете написать скрипт ed:

{ for((line=1; line <= $(wc -l < input) / 2; line++)); do printf '%d,%dj\n' "$line" "$((line + 1))"; done; echo "wq"; } | ed -s input

Переформатировано:

{ for((line=1; line <= $(wc -l < input) / 2; line++))
  do 
    printf '%d,%dj\n' "$line" "$((line + 1))"
  done
  echo "wq"
} | ed -s input

Общая идея заключается в том, чтобы вычислить количество строк, разделить его на два, edкоманды печати, которые объединят нечетные и четные строки. Для вашего файла-образца из восьми строк цикл выдаст следующие edкоманды:

1,2j
2,3j
3,4j
4,5j

Последняя echoкоманда просто указывает edзаписать файл на диск и выйти.

Этот метод не добавляет пробелов между соседними строками, поэтому, если вам нужно добавить, скажем, табуляцию, то вам нужно будет вставить ее, добавив эту строку перед существующей printf:

        printf '%ds/$/  /\n' "$line"

где пробел, который вы видите в тексте замены, — это табуляция (введите ее с помощью Control-V, TAB).

Связанный контент