構造体エントリを含むファイルがあります。
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つの連続した行を結合し、sort
7番目のフィールドの入力をソートし、最後;
に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