cat list.txt
1 apple 4 30 f2 potato 2 40 v3 orange 5 10 f4 grapes 10 8 f
脚本:获取列表::
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

关于linux - 重定向到在 bash 中存储 awk 的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35666545/

10-16 01:52