将 awk 的输出保存到两个不同的变量

pyN*_*Nag 2 variables bash shell awk

好的。我有点迷失了,谷歌搜索对我没有多大帮助。我有一个像这样的命令:

filesize_filename=$(echo $line | awk ' ''{print $5":"$9}') 
echo $filesize_filename 
1024:/home/test
Run Code Online (Sandbox Code Playgroud)

现在,这个将两个 return 或 awk'ed 项目保存到一个变量中。我想实现这样的目标:

filesize,filename=$(echo $line | awk ' ''{print $5":"$9}')
Run Code Online (Sandbox Code Playgroud)

所以我可以像这样单独访问它们

echo $filesize
1024

echo $filename
/home/test
Run Code Online (Sandbox Code Playgroud)

我该如何实现这一目标?

谢谢。

Ed *_*ton 5

用 awk 输出填充 shell 数组,然后用它做任何你喜欢的事情:

$ fileInfo=( $(echo "foo 1024 bar /home/test" | awk '{print $2, $4}') )
$ echo "${fileInfo[0]}"
1024
$ echo "${fileInfo[1]}"
/home/test
Run Code Online (Sandbox Code Playgroud)

如果文件名可以包含空格,那么您必须适当调整 awk 中的 FS 和 OFS 以及 shell 中的 IFS。

当然,您可能根本不需要 awk:

$ line="foo 1024 bar /home/test"
$ fileInfo=( $line )
$ echo "${fileInfo[1]}"
1024
$ echo "${fileInfo[3]}"
/home/test
Run Code Online (Sandbox Code Playgroud)

但要注意$line在最后一种情况下匹配本地文件名时的通配字符。我希望有一种更强大的方法可以从 shell 变量填充 shell 数组,但我无法想到它。