与えられた入力:
hello: world foo bar baz
bar:
baz: bin boop bop fiz bang beep
bap: bim bam bop
boatkeeper: poughkeepsie
次のように、ほとんどの単語を一番上、少なくとも一番最後に配置したいと思います。
baz: bin boop bop fiz bang beep
hello: world foo bar baz
bap: bim bam bop
boatkeeper: poughkeepsie
bar:
sort
これを行うには、他のツールをどのように使用する必要がありますか?
答え1
次のことができます。
awk '{print NF,$0}' file | sort -nr | cut -d' ' -f 2-
awk
各行の前にフィールド数を付けます。次に、sort
対応する数字を押して で削除しますcut
。
答え2
最近のGNUでは、配列要素が印刷される順序(要素によって制御されます)を含む多くの内部パラメータを定義するために配列をawk
使用できます。したがって、値でインデックス付きの配列を作成することができ、要素は値を持ち、それを目的の出力に印刷できます。あなたの場合は次のとおりです。PROCINFO
"sorted_in"
NF" "NR
$0
"@ind_num_desc"
awk '{a[NF" "NR]=$0}END{PROCINFO["sorted_in"]="@ind_num_desc"; for(i in a) print a[i]}' file
答え3
パール1行:
print sort { split(' ',$a) <=> split(' ',$b) } <>;
アルファベット順を使用してタイを切断するには:
print sort { split(' ',$a) <=> split(' ',$b) or $a cmp $b } <>;
答え4
Pythonで。
s = '''hello: world foo bar baz
bar:
baz: bin boop bop fiz bang beep
bap: bim bam bop'''.splitlines()
for i in sorted(s, key=lambda x: len(x.split()), reverse=True):
print(i)
または
with open('/path/to/the/input/file') as f:
m = f.readlines()
for i in sorted(m, key=lambda x: len(x.split()), reverse=True):
print(i, end="")