如何在ksh中反转字符串
How to reverse a string in ksh
请帮我解决这个问题,我有一个数组 包含 1000 行数字,这些行被视为字符串,我希望所有行都一一反转,我的问题是如何反转它们,因为我必须使用 ksh 或与 bash 或其他东西一起使用它会很容易.....我现在拥有的是这个,但是
rev="$rev${copy:$y:1}"
在 ksh 中不起作用。
i=0
while [[ $i -lt 999 ]]
do
rev=""
var=${xnumbers[$i]}
copy=${var}
len=${#copy}
y=$(expr $len - 1)
while [[ $y -ge 0 ]]
do
rev="$rev${copy:$y:1}"
echo "y = " $y
y=$(expr $y - 1)
done
echo "i = " $i
echo "rev = " $rev
#xnumbers[$i]=$(expr $xnumbers[$i] "|" $rev)
echo "xum = " ${xnumbers[$i]}
echo "##############################################"
i=$(expr $i + 1)
done
如果您可以将数组的内容打印到文件中,则可以使用此 awk oneliner 处理该文件。
awk '{s1=split([=10=],A,""); line=""; for (i=s1;i>0;i--) line=line A[i];print line}' file
检查这个!!
other_var=`echo ${xnumbers[$i]} | awk '{s1=split([=11=],A,""); line=""; for (i=s1;i>0;i--) line=line A[i];print line}'`
我已经在 Ubuntu 上用 ksh 测试了这个,结果相同:
number="789"
other_var=`echo $number | awk '{s1=split([=12=],A,""); line=""; for (i=s1;i>0;i--) line=line A[i];print line}'`
echo $other_var
987
我不确定为什么我们不能使用内置的 rev 函数。
$ echo 798|rev
897
您也可以试试:
$ echo 798 | awk '{ for(i=length;i!=0;i--)x=x substr([=11=],i,1);}END{print x}'
897
您可以同时使用cut
、paste
和rev
,只需将printf
更改为cat
file.txt:
paste -d' ' <(printf "%s data\n" {1..100} | cut -d' ' -f1) <(printf "%s data\n" {1..100} | cut -d' ' -f2 |rev)
或 rev
单独,如果它不是 OP 澄清的编号文件。
请帮我解决这个问题,我有一个数组 包含 1000 行数字,这些行被视为字符串,我希望所有行都一一反转,我的问题是如何反转它们,因为我必须使用 ksh 或与 bash 或其他东西一起使用它会很容易.....我现在拥有的是这个,但是
rev="$rev${copy:$y:1}"
在 ksh 中不起作用。
i=0
while [[ $i -lt 999 ]]
do
rev=""
var=${xnumbers[$i]}
copy=${var}
len=${#copy}
y=$(expr $len - 1)
while [[ $y -ge 0 ]]
do
rev="$rev${copy:$y:1}"
echo "y = " $y
y=$(expr $y - 1)
done
echo "i = " $i
echo "rev = " $rev
#xnumbers[$i]=$(expr $xnumbers[$i] "|" $rev)
echo "xum = " ${xnumbers[$i]}
echo "##############################################"
i=$(expr $i + 1)
done
如果您可以将数组的内容打印到文件中,则可以使用此 awk oneliner 处理该文件。
awk '{s1=split([=10=],A,""); line=""; for (i=s1;i>0;i--) line=line A[i];print line}' file
检查这个!!
other_var=`echo ${xnumbers[$i]} | awk '{s1=split([=11=],A,""); line=""; for (i=s1;i>0;i--) line=line A[i];print line}'`
我已经在 Ubuntu 上用 ksh 测试了这个,结果相同:
number="789"
other_var=`echo $number | awk '{s1=split([=12=],A,""); line=""; for (i=s1;i>0;i--) line=line A[i];print line}'`
echo $other_var
987
我不确定为什么我们不能使用内置的 rev 函数。
$ echo 798|rev
897
您也可以试试:
$ echo 798 | awk '{ for(i=length;i!=0;i--)x=x substr([=11=],i,1);}END{print x}'
897
您可以同时使用cut
、paste
和rev
,只需将printf
更改为cat
file.txt:
paste -d' ' <(printf "%s data\n" {1..100} | cut -d' ' -f1) <(printf "%s data\n" {1..100} | cut -d' ' -f2 |rev)
或 rev
单独,如果它不是 OP 澄清的编号文件。