ファイルを並べ替えますが、行のペアを一緒に保ちます。

ファイルを並べ替えますが、行のペアを一緒に保ちます。

構造体エントリを含むファイルがあります。

a1;b1;c1;
d1;e1;f1;g1
a2;b2;c2;
d2;e2;f2;g2

など。

このファイルをgでソートしたいのですが、そのgにabcを保持したいと思います。コマンドラインでこれを行うための良い方法はありますか?今私が考えることができるのは、やや複雑なPerlスクリプトを書くだけです。

答え1

行がペアで提供され、最初の行に3つのフィールドがあり、2番目の行に4つのフィールドがある場合(2番目の行には「g」値が含まれています):

$ sed -n 'N;s/\n//;p' your_file \
   | sort -t';' -k7 \
   | perl -F';' -ane '$,=";";print @F[0..2],"\n";print @F[3..$#F]'

このsedセクションでは、2つの連続した行を結合し、sort7番目のフィールドの入力をソートし、最後;perl各行を2つの部分に分割します。 1つには3つのフィールドがあり、もう1つには4つのフィールドがあります。

答え2

データ構造が同じであると仮定すると、GNU sedとGNU awkを使用してこれを実行できます。たとえば、次のようになります。

# Separate records by an extra new-line
sed '2~2G' infile |

# Read records and use GNU awk's built-in sort on field 7
awk '
  BEGIN { PROCINFO["sorted_in"] = "@ind_str_desc" }
  { h[$7] = $0 }
  END { for(k in h) print h[k] }
' RS= FS='[;\n]+'

出力:

a2;b2;c2;
d2;e2;f2;g2
a1;b1;c1;
d1;e1;f1;g1

関連情報