Grepping / awking分配了$ variable

时间:2014-12-12 09:33:04

标签: bash shell variables awk

是否可以在指定的$变量中grep字符串或将字段与awk进行比较。

例如

grep "word" "$foo"

仅列出$ foo的完整内容。

awk命令无法识别变量,但会在我的文件夹中搜索文件:

awk 'FNR==NR{a[$1]++;next}a[$1]' "$foo" "$fee"

它说 awk:致命:无法打开文件`$ foo'阅读(没有这样的文件或目录)

@BMW建议提供更多细节。他们来了: 这是完整的命令:

foo=$(cat my_text.txt |  grep -B5 'application' | paste -s --delimiters=" " |sed 's/--/\n/g'| awk '{print $1 " " $2 " " $3 " " $4 " " $5}')

这是$ foo的输出和内容。

  • reaction_1 jj-cju 2 application
  • reaction_1 jj-cju 2 application
  • reaction_1 jj-cjo 2 application
  • reaction_4 jj-cji 2 application
  • reaction_5 jj-cju 2 application
  • reaction_5 kk-cju 2 application
  • reaction_7 jj-cju 2 application
  • reaction_7 kk-cji 2 application
  • reaction_7 kk-cji 2 application
  • reaction_7 kk-cju 2 application
  • reaction_7 mm-cju 2 application

2 个答案:

答案 0 :(得分:3)

您可以使用herestring代替文件名来执行此操作:

grep "word" <<< "$foo"

如果您的命令只需要一个输入文件/变量,这将有效。如果您需要多个,例如示例awk命令,则需要使用process substitution

awk 'FNR==NR{a[$1]++;next}a[$1]' <(echo "$foo") <(echo "$fee")

<(...)构造运行内部命令,然后将输出视为文件。

示例:

$ echo "$foo"
first line
second line
last one

$ echo "$fee"
example
text

$ grep "line" <<< "$foo"
first line
second line

$ grep "last" <(echo "$foo")
last one

$ awk '{print NR": "$0}' <(echo "$foo") <(echo "$fee")
1: first line
2: second line
3: last one
4: example
5: text

答案 1 :(得分:0)

如果您正在使用awk进行单词搜索,请使用:

awk -v w="word" '$0 ~ w' "$foo"

假设$foo是一个文件。

您甚至可以使用:

awk '/word/' "$foo"