複数のレコードを含むファイルがあり、各レコードには複数のフィールドがあります。ファイルの内容は次のとおりです。
# 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