awk镜像(反向)行

时间:2013-01-26 07:45:28

标签: perl awk row

我想要反转文件的行(单个单词)。

cat dummy

Hugo
Dumas
Camus

通缉输出如下:

Hugo oguH
Dumas samuD
Camus sumaC

使用awk可能最简单,但perl oneliner也会受到影响。

4 个答案:

答案 0 :(得分:4)

不需要perlawk,只需使用pasterev,然后处理替换(否则只需使用临时文件):

paste -d ' ' file <(rev file)

结果:

Hugo oguH
Dumas samuD
Camus sumaC

答案 1 :(得分:2)

#!/usr/bin/awk -f

{
    row = $0
    s = ""
    for (i = length(row); i > 0; --i)
        s = s substr(row, i, 1)
    print row " " s
}

对于输入中的每一行,循环遍历从每个位置获取长度为1的子字符的字符,并连接以生成反向字符串。然后打印行,空格和反转字符串。

Python更容易!

#!/usr/bin/env python

import sys

for line in sys.stdin:
    row = line.strip()
    print(row + ' ' + row[::-1])

对于标准输入中的每一行,剥去空格以摆脱换行符。然后打印行,空格,然后反转行。它使用默认开头和结尾的“切片”反转,但步长为-1则使切片反转得到字符。

答案 2 :(得分:2)

$ perl -pi -le '$_ .= $" . reverse' file.txt

解释(详见perldoc perlrun):

  • -p :逐行处理和打印文件
  • -i :启用就地修改
  • -l :自动处理行结尾(与chomp一起使用时隐式-p并附加$\
  • $" :另一种将' '写为默认值的方法是空格
  • <强> $_ .= $" . reverse

    $_对应于该行所包含的字符串(减去chomp - ed行结尾)。在这里,.=$_一个空格($")连接,后跟reverse - d字符串。请注意,没有必要明确指定reverse($_),因为如果没有指定参数,标量上下文reverse()会反转$_

答案 3 :(得分:1)

用sed one liner

sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'