他の操作の後、私は基本cat
的にファイルを作成しています。このファイルはタブ区切り形式で出力されます。
列があります
$ cat file.txt
longstring1:with:semicolons ERFVBNMNBFGHNMKJHNMH 1:2:2:2:2 -
secondline:is:here VHNBVFTYHNBGHJMKJHJMN 0:0:0:0:0 -
third:canbefound:here VFTYHBVFGHJNJGVGHJKMNGB 4:1:0:1:0 -
(1)この出力をgrep
にパイピングします。最初の列のみをgrepして、
$ cat file.txt | grep first_column > new_out.txt
この場合、grep
のパイプ出力から最初の列の各行を処理するcat file.txt
ので、ファイルnew_out.txt
はと同じである必要がありますfile.txt
。
(2)コマンドラインツールを使用して、何らかの条件に基づいて最初の列でgrepを実行する方法はありますか?
3番目の列にゼロ以外の要素が含まれている場合にのみ、最初の列の行をgrepしたいと思います。これは可能ですか、それともスクリプト言語(Pythonなど)を使用する必要がありますか?
この場合、操作は次のようになります。
$ cat file.txt | grep first_column if some_condition > new_out.txt
この場合、new_out.txt
は1行目と3行目のみが含まれます。
awk
救助へ。
ケース(1)、最初の列($1
)の値に従ってフィルタリング:
$ awk -F'\t' '$1~"here" {print}' file
secondline:is:here VHNBVFTYHNBGHJMKJHJMN 0:0:0:0:0 -
third:canbefound:here VFTYHBVFGHJNJGVGHJKMNGB 4:1:0:1:0 -
(最初の列、$1
にパターン/文字列が含まれている場合、行全体を印刷しますhere
。)
ケース(2)、最初の列の値に従ってフィルタリングしますが、3番目の列にゼロ以外の要素が少なくとも1つ含まれている場合に限ります。
$ awk -F'\t' '$3~/(^|:)[1-9]+(:|$)/ && $1~"here" {print}' file
third:canbefound:here VFTYHBVFGHJNJGVGHJKMNGB 4:1:0:1:0 -
(前のケースの条件に加えて、3番目の列に$3
パターンが含まれていることを確認します。値の開始と終了の開始:<one_or_more_digits_except_zero>:
コロン:
は省略されます。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加