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」値ではないため、2 番目の「SomethingA」値は無視する必要があります。

ロジックは次のようになると思います: Find SomethingA > output.txt すべての SomethingD を検索 >> 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 に答える