在变量中存储awk操作

时间:2016-10-23 11:13:35

标签: linux bash awk text-processing

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

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 '$4=="+"' "$value_2" )"
minus="$(awk '$4=="-"' "$value_2")"
echo "$plus"
echo "$minus"

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

2 个答案:

答案 0 :(得分:3)

file.1似乎没有被使用。要将行添加到变量,您可以执行此操作

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

同样,你也可以为负号做同样的事。

$ echo "$plus"

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

如果这是你想要达到的目的。

答案 1 :(得分:0)

您不能使用一个变量来使用完整的文件进行输入,因为它会将所有内容保存在一行中,您只能获得第一行的结果 -

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

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

awk '$4 ~ "+" {print $0}' file_2.txt