我想反转文件的行(单个字)。
cat dummy
Hugo
Dumas
Camus
想要的输出如下所示:
Hugo oguH
Dumas samuD
Camus sumaC
使用 awk 可能是最简单的,但 perl oneliner 也很适用。
不需要perl
or awk
,只需使用paste
and rev
,并处理替换(否则只需使用临时文件):
paste -d ' ' file <(rev file)
结果:
Hugo oguH
Dumas samuD
Camus sumaC
#!/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 以使切片反向获取字符。
$ perl -pi -le '$_ .= $" . reverse' file.txt
说明(perldoc perlrun
详情请参阅):
-p
: 以逐行模式处理和打印文件-i
:启用就地编辑-l
: 自动处理行尾(在与和附加一起使用时隐含chomp
s-p
$\
$"
: 另一种写入' '
默认值的方式是空格$_ .= $" . reverse
$_
对应于该行包含的字符串(减去chomp
-ed 行尾)。所以在这里,.=
连接到$_
一个空格 ( $"
),后跟reverse
-d 字符串。请注意,无需reverse($_)
显式指定,因为在标量上下文中,如果未指定参数,则会reverse()
反转。$_
带 sed 一个衬垫
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'