1

我花了一些时间考虑如何解决这个问题,但我不确定,到目前为止我对 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 Find ALL SomethingD's >> output.txt

但我就是不太明白。任何帮助深表感谢!

4

3 回答 3

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") && ...
于 2013-02-24T13:51:16.353 回答
1
grep -m 1 somethingA inputfile.txt >outputfile.txt
grep somethingD inputfile.txt >>outputfile.txt

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

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

于 2013-02-24T14:00:19.420 回答
0

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

grep -o -e 'pattern1' -e 'pattern2' /tmp/1 >> /tmp/2
于 2019-12-16T08:02:19.083 回答