Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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 使用不同IFS解析txt文件_Arrays_Bash_Parsing - Fatal编程技术网

Arrays 使用不同IFS解析txt文件

Arrays 使用不同IFS解析txt文件,arrays,bash,parsing,Arrays,Bash,Parsing,这是我的txt文件中的情况: kevin \t password \t path \n steve \t password \t path \n etc... 如何解析此类文件以将名称放入数组,将密码放入另一个数组,并将idem作为路径? 我想使用IFS变量,但我在识别id、psw或path时遇到了问题 我从以下代码开始: old_IFS=$IFS IFS=$'\t\n' lines=($(cat MYFILE)) IFS=$old_IFS 还是使用awk更好 有人有想法吗?使用

这是我的txt文件中的情况:

kevin \t password \t path \n

steve \t password \t path \n

etc...
如何解析此类文件以将名称放入数组,将密码放入另一个数组,并将idem作为路径? 我想使用IFS变量,但我在识别id、psw或path时遇到了问题

我从以下代码开始:

old_IFS=$IFS

IFS=$'\t\n'

lines=($(cat MYFILE)) 

IFS=$old_IFS
还是使用awk更好

有人有想法吗?

使用while read循环:

while IFS=$'\t' read user password path
do
    users+=( "$user" )
    passwords+=( "$password" )
    paths+=( "$path" )
    echo "$user's password is $password, and their path is $path"
done < yourtextfile
而IFS=$'\t'读取用户密码路径
做
用户+=(“$user”)
密码+=(“$password”)
路径+=(“$path”)
echo“$user的密码是$password,其路径是$path”
完成
这里有一种低效的方法,但很容易阅读:

f() {
    local IFS=$'\n' # Don't wordsplit on just any whitespace. Newlines only
    names=( $(cut -d$'\t' -f1 < file) )
    passes=( $(cut -d$'\t' -f2 < file) )
    paths=( $(cut -d$'\t' -f3 < file) )
}
f
f(){
local IFS=$'\n'#不在任何空格上拆分单词。仅限换行
名称=($(剪切-d$'\t'-f1<文件))
过程=($(剪切-d$'\t'-f2<文件))
路径=($(剪切-d$'\t'-f3<文件))
}
F

我可以告诉您如何将这些值放入数组,但是如果我知道一旦你有了阵列,你想对它们做什么,我可能会告诉你一些更有趣的事情。对于每个用户psw路径,我想启动ftp命令,所以你根本不需要阵列:你可以对每一行执行ftp命令。这些不是一些阵列=)我在OS X 10.8和SUSE Linux 11:
users
变量是整行,而
password
path
是空的。这是因为您的字段没有按问题用制表符分隔。@That't true。编辑为换行符上的wordsplit。