ファイル内の列項目の符号が変更される場所を探し、これが発生した最初の行を印刷します。

ファイル内の列項目の符号が変更される場所を探し、これが発生した最初の行を印刷します。

複数のファイルがあり、各ファイルには3つの列が含まれています。与えられた列項目の符号が最初に変更された時点(つまり、負から正の数)を監視して、これが最初の行を別のファイルに保存できるようにしたいと思います。次の例では、最初の列のシンボルの変更を監視したいと思います。

-1 2 4  
-4 3 5  
-2 4 6
1 2 4  
2 4 5    
2 3 4      
-4 5 6  
-3 4 6  

このコードは行を保存する必要があります-2 4 6別のファイルとして。

答え1

変化があればいつも負から負ではなく正の数まで動作します。前の行を印刷し、フィールド1に負以外の値が表示されたら終了します($1他のフィールドを表示するには数値を変更してください)。

$ awk '$1 >= 0 { print prev; exit; } { prev = $0; }' < inputfile
-2 4 6

どちらも変更できる場合は、前の行にシンボルを保存して比較する必要があります(ここではフィールド番号が必要な2つの場所があるため、自由に設定された変数から取得されます-vfield=1)。

$ awk -vfield=1 'function sign(x) { if (x < 0) return -1; return +1; }
      NR != 1 && sign($field) != prevsign { print prevline; exit; }
      { prevline = $0; prevsign = sign($field) }' < inputfile

どちらの場合も、もちろん、> outputfile出力を別のファイルにリダイレクトする方法を使用できます。

関連情報