1

我需要颠倒文本行对的顺序,例如:

  • 第一线1
  • 二线1
  • 第一线2
  • 二线2
  • 第一线3
  • 二线3

  • 二线1
  • 第一线1
  • 二线2
  • 第一线2
  • 二线3
  • 第一线3

我正在寻找一种自动化的方法(我有 650 行要排序),有什么神奇的解决方案吗?谢谢

4

2 回答 2

2

假设

以下两种解决方案都要求线实际上是成对的。否则,最后一行将不会被打印。

SED 解决方案

sed -n 'h; s/.*//; n; G; p' /tmp/foo
  1. 禁用自动打印。
  2. 复制行以保留空间。
  3. 删除模式空间。
  4. 将下一行读入模式空间。
  5. 追加保持空间。
  6. 打印图案空间。

AWK 解决方案

awk -F'\n' 'NR%2==1 {line=$0}; NR%2==0 {print $1 "\n" line}' /tmp/foo
  1. 不要将行拆分为空格上的字段。
  2. 如果行是奇数,则存储该行。
  3. 如果行是偶数,则打印当前行加上存储的行。
于 2012-06-29T09:58:25.523 回答
0

更明显的shell版本:

while read -r firstline ; read -r secondline
do
    printf '%s\n%s\n' "$secondline" "$firstline"
done
于 2012-07-01T13:22:18.480 回答