12 列のデータを持つファイルがあります。列5が「A」に等しく、列12が「Z」に等しい場合、行全体を削除/削除したいと思います。これはSEDを使用して可能ですか?
質問する
992 次
3 に答える
3
あなたはできる。列がスペースで区切られているとします。
sed -i -e '/\([^ ]* *\)\{4\}A *\([^ ]* *\)\{6\}Z/d' file
-i
フラグは、ファイルをその場で編集するために使用されます。
このパターン[^ ]* *
は、スペースではない 0 個以上の (アスタリスクで示される) 文字 (^
括弧内の後のスペース文字で示される) とその後に続く 0 個以上のスペースに一致します。
このパターンをバックスラッシュのかっこの間に配置すると、それを 1 つの式にグループ化できます。その後、バックスラッシュの中かっこを使用して式を繰り返すことができます。最初に 4 回一致し、A
その後にスペースが続き、パターンが再び 6 回繰り返され、次にZ
.
これが役立つことを願っています=)
于 2012-10-08T19:23:25.617 に答える
2
でこれを行うことができますがsed
、より簡単に行うことができますawk
:
awk '! ( $5 == "A" && $12 == "Z" )' input-file
また
awk '$5 != "A" || $12 != "Z"' input-file
于 2012-10-08T19:38:14.167 に答える
0
perl -F -ane 'print unless($F[4] eq "A" and $F[11] eq "Z") your_file
以下でテスト:
> cat temp
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 A 6 7 8 9 10 11 Z
> perl -F -ane 'print unless($F[4] eq "A" and $F[11] eq "Z")' temp
1 2 3 4 5 6 7 8 9 10 11 12
>
于 2012-10-09T07:38:39.057 に答える