将偶数/奇数行打印到新列

将偶数/奇数行打印到新列

我有一个单列中有 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#Numeric-Addresses

4.2 按数字选择行

……

first~step 此 GNU 扩展匹配从第一个行开始的每个步骤行。特别是,当存在非负 n 使得当前行号等于first + (n * step) 时,将选择行。因此,可以使用 1~2 选择奇数行,使用 0~2 选择偶数行;要从第二行开始每隔三行选取一次,将使用“2~3”;要从第十行开始每隔五行选取一次,请使用 '10~5';而“50~0”只是 50 的一种晦涩的说法。

以下命令演示了步骤地址的用法:

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

$ 序列 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-VTAB

相关内容