1

我有一个包含任意行数的文本文件,例如:

one line
some other line
an additional line
one more here

我想编写一个脚本来根据给定的顺序重新排列这些行。例如

  • 输入 2 1 3 4 将交换第一行和第二行。
  • 输入 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

In awk:

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

Bash-only (don't need to reset IFS if you are putting this in a script):

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