Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用回车符作为分隔符(bash)将文件读入数组_Arrays_Oracle_Bash_Sorting - Fatal编程技术网

Arrays 使用回车符作为分隔符(bash)将文件读入数组

Arrays 使用回车符作为分隔符(bash)将文件读入数组,arrays,oracle,bash,sorting,Arrays,Oracle,Bash,Sorting,我有一个tnsnames.ora文件,格式如下: ALIAS_NAME = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = host.mycompany.com)(PORT = 1823)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = alias_name) ) ) ALIAS_NAME1= (DESCRIPTION =

我有一个tnsnames.ora文件,格式如下:

ALIAS_NAME =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = host.mycompany.com)(PORT = 1823))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = alias_name)
    )
  )

ALIAS_NAME1=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = host.mycompany.com)(PORT = 1823))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = alias_name1)
    )
  )


ALIAS_NAME2 =
    (DESCRIPTION =
    (LOAD_BALANCE = ON)
    (FAILOVER = ON)
    (ADDRESS = (PROTOCOL = TCP)(HOST = host.mycompany.com)(PORT = 1823))
    (ADDRESS = (PROTOCOL = TCP)(HOST = host.mycompany.com)(PORT = 1823))
     (CONNECT_DATA =
      (SERVICE_NAME = ALIAS_NAME2)
      (FAILOVER_MODE =
        (TYPE = SELECT)
        (METHOD = BASIC)
        (RETRIES = 20)
        (DELAY = 1)
      )
    )
  )
我想根据别名按字母顺序对该文件进行排序,因此我想将该文件读入一个由回车分隔的数组,这样数组中的一个元素如下所示:

ALIAS_NAME =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = host.mycompany.com)(PORT = 1823))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = alias_name)
    )
  )
然后我将对数组进行排序。这可能吗?我试过这样做:

IFS='\n ' read -r -a array <<< file_name

IFS='\n'read-r-a数组您需要逐行读取文件

file_name=inputFile
current=-1
while IFS=$'\n' read -r line || [[ $line ]]; do
  regex='^[^ ]'
  if [[ $line =~ $regex ]]; then
    # if it doesn't start with a space
    let current++
  fi
  (( current >= 0 )) || continue # discard garbage before the first alias
  [[ $line ]] || continue # skip empty lines
  array[current]=${array[current]}$'\n'$line
done < "$file_name"
declare -p array
file\u name=inputFile
电流=-1
而IFS=$'\n'读-r行| |[[$line]];做
正则表达式='^[^]'
如果[[$line=~$regex]];然后
#如果它不是以空格开头的
让电流++
fi
((当前>=0))| |继续#在第一个别名之前丢弃垃圾
[[$line]]| |继续#跳过空行
array[current]=${array[current]}$'\n'$行
完成<“$file\u name”
声明-p数组
然后,您将拥有一个包含所需文本的数组


有关此主题的更多信息,请参阅和。

对文本文件进行排序与Oracle有什么关系?是否需要在BASH中进行排序?我可以在Python中想出一种方法来实现这一点,但在BASH中我想不出一种简单的方法来实现这一点。