1

任意の行数のテキストファイルがあります。例:

one line
some other line
an additional line
one more here

指定された順序に基づいてこれらの行を並べ替えるスクリプトを作成したいと思います。例えば

  • 2 1 3 4の入力は、1行目と2行目を入れ替えます。
  • 3 1 2 4を入力すると、3行目が最初、1行目が2番目、2行目が3番目になり、4行目が4番目になります。

一緒に何かをハックすることはできますが、エレガントな解決策があるかどうか疑問に思っていますか?

bashまたはkshのいずれかを使用できます。

4

3 に答える 3

4

あなたが使用することができますsed

for num in $input ; do
    sed $num'!d' file
done
于 2012-11-01T10:58:45.977 に答える
2

これがperlソリューションです:

#!/usr/bin/perl -w
my @lines = <STDIN>; # Read stdin into an array
foreach my $linenum (@ARGV) { # Get the new order from argument list
  print $lines[$linenum-1];
}

スクリプトを次のように実行します。

./scriptname 2 1 3 4 < inputfile
于 2012-11-01T11:23:07.133 に答える
1

awkで:

for num in "$@"; do
    awk "NF==$num" file
done

Bashのみ(これをスクリプトに入れる場合はIFSをリセットする必要はありません):

IFS=$'\n'
lines=( $(<file) )
for num in "$@"; do
    echo lines[num-1]
done
于 2012-11-01T15:33:00.227 に答える