Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 最好的方法是选取两列,并通过分组对数据进行重新排序_Linux_Bash - Fatal编程技术网

Linux 最好的方法是选取两列,并通过分组对数据进行重新排序

Linux 最好的方法是选取两列,并通过分组对数据进行重新排序,linux,bash,Linux,Bash,我运行了一个查询,数据得到如下输出: seta set1 setb set2 setb set3 setc set4 setd set5 setd set6 setd set7 我需要它最终看起来是这样的: seta set1 setb set2 set3 setc set4 setd set5 set6 set7 我想有点像一棵树。由于我的工作性质,我无法给出更详细的示例。类似的示例应该可以: #!/bin/bash first_word='' last_w

我运行了一个查询,数据得到如下输出:

seta set1
setb set2
setb set3
setc set4
setd set5
setd set6
setd set7
我需要它最终看起来是这样的:

seta set1
setb set2
     set3
setc set4
setd set5
     set6
     set7

我想有点像一棵树。由于我的工作性质,我无法给出更详细的示例。

类似的示例应该可以:

#!/bin/bash

first_word=''
last_word=''
while read line ; do
  first_word=`echo "$line" | sed 's/^\([^ ]\+\).*$/\1/'`
  if [ "$first_word" == "$last_word" ] ; then
    echo -n $first_word | tr "[:graph:]" " "
    echo "$line" | sed 's/^[^ ]\+\(.*\)$/\1/'
  else
    echo $line
    last_word="$first_word"
  fi
done

您可以使用
awk

awk 'BEGIN{fmt="%-10s%s\n"}
     $1==last{printf fmt," ",$2; next }
     {printf fmt,$1,$2; last=$1}' file
seta      set1
setb      set2
          set3
setc      set4
setd      set5
          set6
          set7
请避免“给我密码”的问题。而是显示您正在处理的脚本,并说明问题所在。也看到