スクリプト入力で指定された順序でファイルの各レコードフィールドを並べ替えます。

スクリプト入力で指定された順序でファイルの各レコードフィールドを並べ替えます。

複数のレコードを含むファイルがあり、各レコードには複数のフィールドがあります。ファイルの内容は次のとおりです。

# cat inputfile

name: AAA
age:  38
city: C1
state: S1

age: 29
city: C2
name: BBBbbbB
state: S2

state: S3
age: 21
city: C3
name: ccccccC 

シェルスクリプトのパラメータで指定された順序で各レコードのフィールドをソートしたいと思います。

次のスクリプトを実行すると:

# sh sortout.sh <inputfile> name age city state

出力は次のようになります。

name: AAA
age:  38
city: C1
state: S1

name: BBBbbbB
age: 29
city: C2
state: S2

name: ccccccC 
age: 21
city: C3
state: S3

ベストアンサー1

短絡モードで作業するとき、PerlこれはPerlがこのオプションを使用して一度に1段落ずつ食べることを意味します-00

次に、現在のレコードから最初のフィールド(コロンで区切り)を取得し、ハッシュに保存します。

$ perl -l -00ane '
    my %h = reverse /^(([^:]+):.*)$/mg;
    print $h{$_} for qw/name age city state/;
' input.file

特定の要件に応じて、次のことができます。

cat - <<\eof > code.sh
if=$1;shift
perl -ls -00ane '
  my %h = reverse /^(([^:]+):.*)$/mg;
  print $h{$_} for split /\s+/, $order;
' -- -order="$*" "$if"
eof

コードファイルを生成して実行します。

sh code.sh inputfile name age city state

おすすめ記事