首页 > 试题广场 >

将字段逆序输出文件的每行

[编程题]将字段逆序输出文件的每行
  • 热度指数:18353 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
编写一个shell脚本,将文件nowcoder.txt中每一行的字段逆序输出,其中字段之间使用英文冒号:相分隔。
假设nowcoder.txt内容如下:
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
你的脚本应当输出
/usr/bin/false:/var/empty:Unprivileged User:-2:-2:*:nobody
/bin/sh:/var/root:System Administrator:0:0:*:root

输入描述:
1


输出描述:
1
示例1

输入

nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh

输出

/usr/bin/false:/var/empty:Unprivileged User:-2:-2:*:nobody
/bin/sh:/var/root:System Administrator:0:0:*:root
awk -F ":" '
{
    str = $NF;
    for(i = NF-1;i >= 1;i--){
        str = str":"$i
    };
    print str;
}
'

发表于 2025-01-16 23:00:27 回复(0)
awk -F ':' '{
    for(i = NF; i > 0; i--){
        printf($i"%s", i == 1 ? "\n" : ":")
    }
}'


发表于 2024-12-07 19:16:38 回复(0)
awk -F ':' -v OFS=':' '{print $7,$6,$5,$4,$3,$2,$1}' nowcoder.txt

发表于 2024-10-25 21:16:08 回复(0)
awk -F ":" '{
    str=""
    for(x=1;x<=NF;x++)
        str=$x":"str
    print str
} ' | sed "s/:$//"

发表于 2023-09-27 18:52:00 回复(0)

awk -F: '{ a = $1;
for (i=2; i <= NF; i ++){
a = $i":"a;
}
print a
}' nowcoder.txt

发表于 2023-09-22 22:08:06 回复(0)
IFS=:  # 设置IFS为冒号
while read -r line; do
    arr=(${line})
    s=""
    for ((i=${#arr[@]}-1; i>=0; i--)); do
        s="${s}${arr[${i}]}"
    done
    echo "${s}"
done < nowcoder.txt
为啥结果会出现一些奇怪的字符呢?

输入:
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
输入
/usr/bin/false/var/emptyUnprivileged User-2-2solution.shnowcoder.txtmeetcoder.txta.shnobody
/bin/sh/var/rootSystem Administrator00solution.shnowcoder.txtmeetcoder.txta.shroot


发表于 2023-09-21 19:56:56 回复(1)
# 方法1: 最直接的方法就是使用awk逆序打印即可
# 首先字段的index从NF开始,到最后的1结束,但是需要注意的是每个index的值后面都要跟着一个冒号,但是index为1时除外,
# 当index为1时,后面直接跟\n进行换行即可
awk -F ':' 'BEGIN{}{
    for(i=NF; i>=1; i--) {
        if(i==1){
            printf("%s\n", $i)
        } else {
            printf("%s:", $i)
        }
    }
}END{}' nowcoder.txt
# 输出:
#/usr/bin/false:/var/empty:Unprivileged User:-2:-2:*:#nobody
#/bin/sh:/var/root:System Administrator:0:0:*:#root


发表于 2023-03-23 10:50:52 回复(0)
awk -F: '{print $7":"$6":"$5":"$4":"$3":"$2":"$1}' $1
发表于 2023-01-11 11:34:59 回复(0)
awk -F ":" '
{
    sum = ""; 
    for(i = NF; i >0 ;i--){
        if(i>1)
            sum = sum""$i":"; 
        else
            sum = sum""$i;
    }  
    print sum;
}'

发表于 2022-09-07 18:55:21 回复(0)
awk  -v FS=':' '{res="";for(i=NF;i>1;--i){res=res""$i":"} print res""$1}' nowcoder.txt
发表于 2022-08-27 20:17:41 回复(0)
awk -F ":" '{for(i=NF;i>1;i--)printf "%s:",$i;print $1}' nowcoder.txt 
发表于 2022-08-23 21:06:19 回复(0)
#!/bin/bash

cat nowcoder.txt|awk -F ':' '{
        for(i=0;i<NF;i++)
        {
                if(i==0)
                        out=$NF
                else
                        out=out":"$(NF-i)
        }
        print out
}'

发表于 2022-08-10 19:50:19 回复(0)
#!/bin/bash
declare -a strarr
while read line
do
  nf=$(echo "${line}" |awk -F":" '{print NF}')
  i=1
  while ((i>=1 && i<=${nf}))
  do
  elem=$(echo "${line}"|cut -d":" -f $i)
  idx=$((${nf}-${i}))
  lastidx=$((${nf}-1))
  if [ ${idx} -eq ${lastidx} ];then
  strarr[${idx}]=${elem}
  else
  strarr[${idx}]=${elem}"+"
  fi
  let i++
  done
  result=${strarr[*]}
  echo ${result//+ /:}

done < nowcoder.txt


### 应该是最笨拙的代码了
发表于 2022-08-02 22:31:47 回复(0)
awk -F ":" '{
str=$NF
for (i=NF-1;i>0;i--) 
str=sprintf("%s%s%s",str,":",$i)
print(str)
}'  nowcoder.txt
发表于 2022-07-17 02:27:31 回复(0)
awk -F ":" '{
    for (i=NF;i>=1;i--){
        if(i == 1){
            print $i
        }else{
            printf $i":"
        }
    }

}' nowcoder.txt
发表于 2022-07-12 20:09:07 回复(0)
awk -F":" '{for(i=NF;i>0;i--) {if(i==1){printf("%s\n",$i)} else {printf("%s:",$i)}}}' nowcoder.txt

先通过分隔符将每行进行分割,然后从一行中的最后一列(i=NF)始读取内容,printf将读取到的内容进行分隔符拼接,当读取到最后一列(i=1)的时候,使用printf进行换行并且不能添加分隔符
发表于 2022-07-12 17:14:51 回复(0)