我有一个看起来像这样的文件
example text [1234] [0] Part 2 /var/tmp/path
example text [1234] [0] Part 3 /var/tmp/path
example text [1234] [0] Some Text more text
example text [1235] [0] Part 4 /var/tmp/path
example text [1235] [0] Part 5 /var/tmp/path
example text [1236] [0] Part 6 /var/tmp/path
example text [1236] [0] other text foo bar
我有另一个文本文件,用户可以在其中编写部分。 所以它看起来像这样:
Part 2
Part 4
Part 6
我需要一个grep左右第二个文件被读取并搜索第一个括号中的数字,并将它们保存到变量中
在示例中,我需要获得输出
1234
1235
1236
它应该在变量中用于进一步的工作
到目前为止,我尝试了
grep -F -f parts.txt search.log
但我不知道如何不显示第2,4和6部分所示的行,而只知道第一个括号内的数字
答案 0 :(得分:1)
这是一种方法。
myparts=$(grep -F -f parts.txt search.log | awk -F'[][]' '{print $2}' | sort | uniq)
parts.txt是用户在其中编写部件号的文件。
grep返回部件号匹配的行。
awk使用[
和]
作为分隔符来提取它们之间的第一个单词
答案 1 :(得分:0)
不确定是否只有一个grep语句可以做到这一点,但是一个小循环可以。
cat file2 |while read line
do
grep $line file1|awk '{print $3}'|sed 's/\[//g'|sed 's/\]//g' >> tempfile
done
现在可以进一步使用tempfile或代替temp文件,你可以通过
将它放在变量中abcd="$abcd (grep $line file1|awk '{print $3}'|sed 's/\[//g'|sed 's/\]//g')"