用bash将文件读入数组

时间:2018-12-07 22:22:51

标签: bash shell

这是我的代码

#!bin/bash
IFS=$'\r\n'
GLOBIGNORE='*'
command eval
'array=($(<'$1'))'

sorted=($(sort <<<"${array[*]}"))
for ((i = -1; i <= ${array[-25]}; i--)); do
echo "${array[i]}" | awk -F "/| " '{print $2}'
done

我不断收到一条错误消息,指出“第5行:array =($(<)):找不到命令” 这是我的问题。

总体而言,我的代码应将文件作为命令行参数读入文件,对元素进行排序,然后打印出最后25行的第2列。我到目前为止还无法进行测试,因此如果有问题,也将不胜感激。

这是文件包含的内容:

290729 123456
  79076 12345
  76789 123456789
  59462 password
  49952 iloveyou
  33291 princess
  21725 1234567
  20901 rockyou
  20553 12345678
  16648 abc123
  16227 nicole
  15308 daniel
  15163 babygirl
  14726 monkey
  14331 lovely
  14103 jessica
  13984 654321
  13981 michael
  13488 ashley
  13456 qwerty
  13272 111111
  13134 iloveu
  13028 000000
  12714 michelle
  11761 tigger
  11489 sunshine
  11289 chocolate
  11112 password1
  10836 soccer
  10755 anthony
  10731 friends
  10560 butterfly
  10547 purple
  10508 angel
  10167 jordan
   9764 liverpool
   9708 justin
   9704 loveme
   9610 fuckyou
   9516 123123
   9462 football
   9310 secret
   9153 andrea
   9053 carlos
   8976 jennifer
   8960 joshua
   8756 bubbles
   8676 1234567890
   8667 superman
   8631 hannah
   8537 amanda
   8499 loveyou
   8462 pretty
   8404 basketball
   8360 andrew
   8310 angels
   8285 tweety
   8269 flower
   8025 playboy
   7901 hello
   7866 elizabeth
   7792 hottie
   7766 tinkerbell
   7735 charlie
   7717 samantha
   7654 barbie
   7645 chelsea
   7564 lovers
   7536 teamo
   7518 jasmine
   7500 brandon
   7419 666666
   7333 shadow
   7301 melissa
   7241 eminem
   7222 matthew

2 个答案:

答案 0 :(得分:2)

在Linux中,您只需做一个

sort -nbr file_to_sort  | head -n 25 | awk '{print $2}'

答案 1 :(得分:0)

  

读取文件作为命令行参数,对元素进行排序,然后   打印出最后25行的第2列。

根据问题的描述,我建议:

#! /bin/sh
sort -bn $1 | tail -25 | awk  '{print $2}'

通常,请使用外壳程序对文件名进行操作,切勿使用 Shell对数据进行操作。诸如 sort awk 之类的实用程序距离很远 处理外壳时,比shell更快,更强大 文件。