微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux-重定向到在bash中存储awk的变量

cat list.txt

1苹果4 30 f
2马铃薯2 40 v
3橙色5 10 f
4颗葡萄10 8 f

脚本:getlist ::

if  [[ "$@" == *[f]* ]] ; then
  awkv1 = $(grep f | awk '{ print $2  $3 }')
else
  awkv1 = $(awk '{ print $2 $4 $5 }')
fi

cat list.txt  | $(awkv1)

我有一个变量awkv1,它根据参数’f’存储值.
但这是行不通的.
运行:: getlist f不会执行任何操作.

它应该像这样工作:
如果在参数中传递了’f’,则:: cat list.txt | grep f | awk'{print $2 $3}’

否则:: cat list.txt | awk'{print $2 $4 $5}’

解决方法:

使用bash数组时,将部分命令行存储在字符串变量中更容易出错.

您可以像这样调整脚本:

#!/bin/bash

# store awk command line in an array
if  [[ "$*" == *f* ]]; then
  awkcmd=(awk '/f/{ print $2, $3 }')
else
  awkcmd=(awk '{ print $2, $4, $5 }')
fi

# execute your awk command
"${awkcmd[@]}" list.txt

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐