好。我有点迷茫,谷歌搜索对我帮助不大。 我有一个命令:
filesize_filename=$(echo $line | awk ' ''{print $5":"$9}')
echo $filesize_filename
1024:/home/test
现在这个将两个返回或awk'ed项目保存到一个变量中。我想实现这样的目标:
filesize,filename=$(echo $line | awk ' ''{print $5":"$9}')
所以我可以像
那样单独访问它们echo $filesize
1024
echo $filename
/home/test
如何实现这一目标?
感谢。
答案 0 :(得分:3)
使用awk输出填充shell数组,然后随意执行任何操作:
$ fileInfo=( $(echo "foo 1024 bar /home/test" | awk '{print $2, $4}') )
$ echo "${fileInfo[0]}"
1024
$ echo "${fileInfo[1]}"
/home/test
如果文件名可以包含空格,那么您必须适当调整awk中的FS和OFS以及shell中的IFS。
你当然可能根本不需要awk:
$ line="foo 1024 bar /home/test"
$ fileInfo=( $line )
$ echo "${fileInfo[1]}"
1024
$ echo "${fileInfo[3]}"
/home/test
但要小心在最后一种情况下匹配本地文件名的$line
中的globbing字符。我希望有一种更健壮的方法可以从shell变量填充shell数组,但是我无法想到它。
答案 1 :(得分:2)
使用bash的read
:
read size name < "$(awk '{print $5, $9}' <<< "$line")"
# Now you can output them separately
echo "$size"
echo "$name"
答案 2 :(得分:2)
您可以在awk的输出中使用进程替换:
read filesize filename < <(echo "$line" | awk '{print $5,$9}')
你可以完全避免使用awk:
read _ _ _ _ filesize _ _ _ filename _ <<< "$line"