awk を使用してテーブルの行を並べ替えます。

awk を使用してテーブルの行を並べ替えます。

何百もの行を持つテーブルがあります。

a1 
a2 
a3 
a4 
b1 
b2 
b3 
b4 
c1 
c2 
c3 
c4
... etc.

次の順序で商品を返品したいと思います。

a1
b1
c1
d1
a2
b2
c2
d2
a3
b3
c3

次のスクリプトはブロックの最初の行を選択します。

$ awk '{if(NR==1||NR%4==1)print}'

しかし、ファイル全体に対してこれを行うにはどうすればよいですか?

ベストアンサー1

これをsort使ってソートできます。特に、アルファベット順と数値順の並べ替えを処理する一般的な並べsort替えを実行するように指示できます。より一般的なシンボルの代わりにシンボルを使用して、g文字列内でどの文字をソートするかを制御できます。sortX.YX,Y

たとえば、

$ sort -k1.2g file
a1
b1
c1
a2
b2
c2
a3
b3
c3
a4
b4
c4

ソートオプション:

  -k, --key=KEYDEF
          sort via a key; KEYDEF gives location and type
  -g, --general-numeric-sort
         compare according to general numerical value

  KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is
  a field number and C a character  position in the field; both are origin 1,
  and the stop position defaults to the line's end.  If neither -t nor -b is 
  in effect, characters in a field are counted from the beginning of the 
  preceding whitespace.  OPTS is one or  more  single-letter ordering options
  [bdfgiMhnRrV],  which  override  global ordering options for that key.  If 
  no key is given, use the entire line as the key.

おすすめ記事