Linux shell命令,用于反转变长文本记录的字段顺序
我想要一个命令行咒语来反转任意长度文本记录的字段顺序。和中提供的解决方案无法解决此问题,因为它们假定字段数量是固定的,尽管可能只需稍作更改 有点像显示反向Linux shell命令,用于反转变长文本记录的字段顺序,linux,shell,parsing,reverse,command-line-interface,perl,awk,Linux,Shell,Parsing,Reverse,Command Line Interface,Perl,Awk,我想要一个命令行咒语来反转任意长度文本记录的字段顺序。和中提供的解决方案无法解决此问题,因为它们假定字段数量是固定的,尽管可能只需稍作更改 有点像显示反向cat功能的tac命令。我想知道ohce命令会做什么(如果存在的话)来反转echo函数性 例如: a b c d e f g h i 应该转化为 d c b a f e i h g 使用awk: awk '{for (i=NF; i>1; i--) printf "%s%s", $i, FS; print $i }' file d c
cat
功能的tac
命令。我想知道ohce
命令会做什么(如果存在的话)来反转echo
函数性
例如:
a b c d
e f
g h i
应该转化为
d c b a
f e
i h g
使用awk:
awk '{for (i=NF; i>1; i--) printf "%s%s", $i, FS; print $i }' file
d c b a
f e
i h g
使用awk:
awk '{for (i=NF; i>1; i--) printf "%s%s", $i, FS; print $i }' file
d c b a
f e
i h g
有一个命令可以执行此操作,名为
rev
from:
或使用:
但正如您在评论中所解释的,如果您想要最新的3列,您可以使用:
有一个命令可以执行此操作,名为
rev
from:
或使用:
但正如您在评论中所解释的,如果您想要最新的3列,您可以使用:
对于bash:
while read -ra words; do
for ((i=${#words[@]}-1; i>=0; i--)); do
printf "%s " "${words[i]}"
done
echo
done < file
读时-ra字;做
对于((i=${#words[@]}-1;i>=0;i-);做
printf“%s”${words[i]}
完成
回声
完成<文件
使用bash:
while read -ra words; do
for ((i=${#words[@]}-1; i>=0; i--)); do
printf "%s " "${words[i]}"
done
echo
done < file
读时-ra字;做
对于((i=${#words[@]}-1;i>=0;i-);做
printf“%s”${words[i]}
完成
回声
完成<文件
使用:
输出:
d c b a
f e
i h g
xyz abc
与rev
不同,它不反转单词:
echo 'abc xyz' | datamash --no-strict -t' ' reverse
输出:
d c b a
f e
i h g
xyz abc
使用:
输出:
d c b a
f e
i h g
xyz abc
与rev
不同,它不反转单词:
echo 'abc xyz' | datamash --no-strict -t' ' reverse
输出:
d c b a
f e
i h g
xyz abc
rev
反转字符,因此类似于abc def
的行将显示为fed cba
。这个问题是不明确的,所以@chiam必须澄清。有了这两种解决方案,OP可以选择,他们可以处理这两种情况。修复了perl版本,为每个线条添加了新行,以消除歧义,但rev反转所有字符的事实并不影响它对我的有用性,只需再次应用它echo
给我最后三个字段|rev
|(read
abc忽略其余部分;echo
$a$b$c)|rev
如果需要最新的3列,请查看我的awk
解决方案。rev
将字符反转,因此类似abc def
的行将显示为fed cba
。这个问题是不明确的,所以@chiam必须澄清。有了这两种解决方案,OP可以选择,他们可以处理这两种情况。修复了perl版本,为每个线条添加了新行,以消除歧义,但rev反转所有字符的事实并不影响它对我的有用性,只需再次应用它echo
给我最后三个字段|rev
|(read
abc忽略其余的;echo
$a$b$c)|rev
如果需要最新的三列,请参阅我的awk
解决方案。