2

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

cat dummy

Hugo
Dumas
Camus

想要的输出如下所示:

Hugo oguH
Dumas samuD
Camus sumaC

使用 awk 可能是最简单的,但 perl oneliner 也很适用。

4

4 回答 4

4

不需要perlor awk,只需使用pasteand rev,并处理替换(否则只需使用临时文件):

paste -d ' ' file <(rev file)

结果:

Hugo oguH
Dumas samuD
Camus sumaC
于 2013-01-26T07:50:18.607 回答
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 以使切片反向获取字符。

于 2013-01-26T07:53:07.913 回答
2
$ perl -pi -le '$_ .= $" . reverse' file.txt

说明(perldoc perlrun详情请参阅):

  • -p: 以逐行模式处理和打印文件
  • -i:启用就地编辑
  • -l: 自动处理行尾(在与和附加一起使用时隐含chomps-p$\
  • $": 另一种写入' '默认值的方式是空格
  • $_ .= $" . reverse

    $_对应于该行包含的字符串(减去chomp-ed 行尾)。所以在这里,.=连接到$_一个空格 ( $"),后跟reverse-d 字符串。请注意,无需reverse($_)显式指定,因为在标量上下文中,如果未指定参数,则会reverse()反转。$_

于 2013-01-26T10:09:22.060 回答
1

带 sed 一个衬垫

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

于 2013-01-26T08:01:11.217 回答