在unix中,每隔一行反转一行,写入一个新文件

2024-10-03 15:34:51 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个文件,wassup.txt,其中的行是:

wassup
donut
skateboard
? teeth. !

我想每隔一行反转一次字符,从第二行开始,然后另存为一个新文件pussaw.txt,其行内容如下:

^{pr2}$

理想情况下,解决方案只使用基本终端/Unix函数,或者awk、perl或python。在

我知道我可以用代码翻转每一行:

rev wassup.txt > pussaw.txt

问题是如何从第二行开始,每隔一行执行一次。在


Tags: 文件txt终端内容unix情况解决方案字符
3条回答

使用Perl的选项组装一个oneliner。在

perl -lpe '$_ = reverse $_ unless $.%2' file

-l(小写L)在打印时切掉终止的换行符并将其重新加上;-p使Perl在输入行上循环并在运行脚本后打印每一行;$_是当前输入行,$.是行号。在

以下是awk解决方案:

awk '
function reverse(s,    r) {
  for (i=length(s); i>0; i--)
    r=r substr (s, i, 1);
  return r
}
{ 
  print ((NR%2) ? $0: reverse($0))
}' file

函数reverse()反转给定的字符串,每隔一行调用一次。在

简单Python脚本:

#!/usr/bin/python

import sys

flip = False

for line in sys.stdin:
    if flip:
        print line.strip()
    else:
        print line.strip()[::-1]
    flip = not flip

将其另存为,例如flip_evens.py,然后修复权限(chmod +x flip_evens.py),并将其作为./flip_evens.py < input.txt运行。在

相关问题 更多 >