反转线对的线顺序

时间:2012-06-29 08:59:23

标签: regex sorting text awk grep

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

  • firstline1
  • secondline1
  • firstline2
  • secondline2
  • firstline3
  • secondline3

  • secondline1
  • firstline1
  • secondline2
  • firstline2
  • secondline3
  • firstline3

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

2 个答案:

答案 0 :(得分:2)

假设

以下两种解决方案都要求线条成对出现。否则,最后一行将不会被打印。

SED解决方案

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

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

答案 1 :(得分:0)

更明显的shell版本:

while read -r firstline ; read -r secondline
do
    printf '%s\n%s\n' "$secondline" "$firstline"
done