我花了一些时间考虑如何解决这个问题,但我不确定,到目前为止我对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的
但我无法得到它。 非常感谢任何帮助!
答案 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