将 awk 操作存储在变量中

Storing awk manipulation in variable

我有两个制表符分隔格式的文本文件,如下所示。

file_1

Entry_1 36372   36414   7   Aa  14956   36371   -
Entry_1 36471   36526   3   Aa  14956   36371   -

file_2

Entry_1 36365   36395   -
Entry_1 36366   36394   -
Entry_1 36367   36395   -
Entry_1 36368   36395   -
Entry_1 36394   36414   -
Entry_1 36471   36502   +
Entry_1 36483   36516   +
Entry_1 36495   36526   +

这两个文件内容分别存储在两个不同的变量中。现在我想提取第 4 列中带有“+”符号的行并将其存储在变量中,然后打印出来。但它抛出错误消息:

"line 4: /usr/bin/awk: Argument list too long"
"line 5: /usr/bin/awk: Argument list too long"

这是我试过的代码

#!/bin/bash
value_1=$(cat file_1.txt);
value_2=$(cat file_2.txt);
plus="$(awk '=="+"' "$value_2" )"
minus="$(awk '=="-"' "$value_2")"
echo "$plus"
echo "$minus"

请指导我。我想提取那些带有“+”和“-”符号的条目并存储在变量“$plus”和“$minus”中。

你不能使用一个变量来使用完整的文件作为输入,因为它会将所有内容都放在一行中,你只会得到第一行的结果 -

echo $value_1
Entry_1 36372 36414 7 Aa 14956 36371 - Entry_1 36471 36526 3 Aa 14956 36371 -

如果您的要求只是打印带有“+”符号的行作为第 4 列,那么您可以尝试下面的代码 -

awk ' ~ "+" {print [=11=]}' file_2.txt

file.1 好像没用过。要将行获取到变量,您可以这样做

$ plus=$(awk '=="+"' file.2)

同样,你可以对负号做同样的事情。

$ echo "$plus"

Entry_1 36471   36502   +
Entry_1 36483   36516   +
Entry_1 36495   36526   +

如果这是你想要实现的。