我想要反转文件的行(单个单词)。
cat dummy
Hugo
Dumas
Camus
通缉输出如下:
Hugo oguH
Dumas samuD
Camus sumaC
使用awk可能最简单,但perl oneliner也会受到影响。
答案 0 :(得分:4)
不需要perl
或awk
,只需使用paste
和rev
,然后处理替换(否则只需使用临时文件):
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/.//'