1

複数の列を持つファイルがあります。最初の 2 つのフィールドに同じ値を持つレコードを除外しようとしています。両方のフィールドにテキスト値が保持されます。これは私が使用しているコマンドです:

cat input_file | awk -F'\t' '{if($1==$2) print $1 $2}'

このコマンドを実行すると、フィールドの値が数値である行のみが取得されます。ファイルには、数値ではない 2 つのフィールドに同じ値を持つ複数の行が含まれています。awkに文字列比較を強制するにはどうすればよいですか?

また、これを達成できる他の方法はありますか?(私は Unix 環境が初めてで、あまりにも多くのトリックを知りません...アドバイスをいただければ幸いです)

4

4 に答える 4

2

最初の 2 列が同じであるすべての行を除外する場合は、空白をデフォルトのフィールド区切り文字awk '$1!=$2' fileとして使用するだけで、デフォルトのアクションは印刷です。awk

$ cat file
1       1        col3   line1
two     two      col3   line2
three   3        col3   line3           
four4   four4    col3   line4

$ awk '$1!=$2' file
three   3        col3   line3           

$ awk '$1==$2' file
1       1        col3   line1
two     two      col3   line2
four4   four4    col3   line4

フィールドタイプは無関係であり、 を使用するcat必要はありません。

于 2013-01-08T09:29:52.057 に答える
0

私はsudo_Oによって作られた例を取っています

[sgeorge@sgeorge-ld ~]$ cat s
1       1        col3   line1
two     two      col3   line2
three   3        col3   line3           
four4   four4    col3   line4
[sgeorge@sgeorge-ld ~]$ cat s | perl -lane '$F[0] == $F[1] && print'
1       1        col3   line1
two     two      col3   line2
four4   four4    col3   line4
于 2013-01-08T09:48:35.577 に答える
0

問題を引き起こしている追加を除いて、実際には正しいことをしてい-F'\t'ます。awk では、フィールド セパレータ FS のデフォルト値は、単一のスペース " " を含む文字列です。

そのため、それを削除する必要があります-F'\t'

たとえば、以下を参照してください。

> cat temp
1       1 random text
some some random text
some more random text


> nawk '{if($1==$2){print}}' temp
1       1 random text
some some random text

> nawk -F'\t' '{if($1==$2){print}}' temp
>

2番目のコマンドが機能しなかった理由はまだわかりません。しかし、はい、それを削除する必要があります-F

于 2013-01-08T09:48:04.620 に答える
0

ピュアバッシュ

while read x y
do
  [ $x = $y ] && echo $x $y
done < input_file
于 2013-01-08T09:30:00.877 に答える