如何排列数据线

时间:2019-04-05 07:01:14

标签: shell sed

我需要帮助。我有一个像这样的文件:

-1.03 a b c
2.04 c b d
3.05 d b c
4.07 a n m
11.09 z y z
-12.52 o m n
13.04 u v t
14.05 a b j
21.06 j b c
22.01 n m h
23.05 i k m
-24.56 i o e
31.02 u a f
32.03 k l m
33.04 w d c
34.07 e i k
41.09 j o l
42.01 k p u
-43.06 o v m
44.55 h j l

我不知道如何通过对bash shell的行号进行分组来排列这些数据行:(1、5、9、13、17),(2、6、10、14、18),(3、7、11 ,15,19),(4,8,12,16,20)您能帮我吗?

打击壳

我需要安排行并将结果导出到另一个文件,如下所示:

-1.03 a b c
11.09 z y z
21.06 j b c
31.02 u a f
41.09 j o l

2.04 c b d
-12.52 o m n
22.01 n m h
32.03 k l m
42.01 k p u

3.05 d b c
13.04 u v t
23.05 i k m
33.04 w d c
-43.06 o v m

4.07 a n m
14.05 a b j
-24.56 i o e
34.07 e i k
44.55 h j l

2 个答案:

答案 0 :(得分:4)

您可以使用以下内容:

rev filename.txt | sort | rev | sed 's/^\(.\)$/\n\1/g'

说明:

  • 从右到左排序
  • 在每个数字前插入新行。

答案 1 :(得分:0)

  

我不知道如何通过bash shell来对这些数据行进行分组   行号:(1,5,9,13,17)(2,6,10,14,18)(3,7,11,15,19),   (4,8,12,16,20)您能帮我吗?

如果您确实要以这种方式重新组合这些行,则可以使用以下命令:

for i in `seq 4`; do sed -n "$i~4p" file.txt; echo; done
-1.03 a b c
11.09 z y z
21.06 j b c
31.02 u a f
41.09 j o l

2.04 c b d
-12.52 o m n
22.01 n m h
32.03 k l m
42.01 k p u

3.05 d b c
13.04 u v t
23.05 i k m
33.04 w d c
-43.06 o v m

4.07 a n m
14.05 a b j
-24.56 i o e
34.07 e i k
44.55 h j l

i上从1循环到4;运行sed命令从行$i + i+4, i+8,...打印,然后echo将添加一个空行。