Unix - 在文件中查找模式,复制到另一个文件中

时间:2013-02-24 13:46:48

标签: unix awk grep find

我花了一些时间考虑如何解决这个问题,但我不确定,到目前为止我对unix的使用相当有限。

我有一个文本文件,让它给它命名为“Text.txt”,其中包含大量信息。我们说它包含:

SomethingA: aValue
SomethingB: bValue
SomethingC: cValue
SomethingD: dValue
SomethingD: anotherDValueThisTime
SomethingA: aValueToIgnore

我想搜索“Text.txt”,找到一些值,然后将值放在一个新文件output.txt中。

这会变得有点棘手,因为我想要做的是获取somethingA的第一个值,然后是每个SomethingD值。

因此“output.txt”中的输出应为:

aValue
dValue
anotherDValue

第二个“SomethingA”值想要被忽略,因为这不是第一个“SomethingA”值。

我想象的逻辑是这样的: Find SomethingA> output.txt的 查找所有SomethingD>> output.txt的

但我无法得到它。 非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

awk是理想的

awk '/^SomethingA/ && ! a++ || /^SomethingD/ { print $2 }' FS=: text.txt > output.txt

这有点草率,但你可以更准确地说:

awk '$1 == "SomethingA" && ! a++ || $1 == "SomethingD" { print $2 }' FS=: text.txt > output.txt

不幸的是,这需要键的固定字符串。如果你想要一个正则表达式,你可以这样做:

awk 'match($1, "pattern") && ...

答案 1 :(得分:1)

grep -m 1 somethingA inputfile.txt >outputfile.txt
grep somethingD inputfile.txt >>outputfile.txt

grep选项-m设置您想要获得的最大匹配数。

>>会附加到文件而不是像>那样覆盖它。

答案 2 :(得分:0)

我认为您需要的是带有grep选项的-o命令。它是这样的:

grep -o -e 'pattern1' -e 'pattern2' /tmp/1 >> /tmp/2