次のスクリプトを使用してください。
awk '{print $0"\t"NR}' test | grep NA | awk '{print $21}'
「NA」を含むファイルから行番号を取得しています。
326
399
672
1512
1734
1737
2212
使用sed、最後のawkコマンドの後にパイプして、同じコマンドの標準入力を介してこの行をファイルから削除できますか?そうでなければ簡単な方法はありますか?
ベストアンサー1
より簡単な方法は以下を使用することですsed
。
sed '/NA/d' test >test.new
内部編集にGNUを使用したい場合sed
(これによりファイルが修正されますtest
):
sed -i '/NA/d' test
このsed
式は、正規表現に一致する入力のすべての行にコマンドを適用します/NA/d
。このコマンドは行を削除します。d
NA
d
行番号が次の場合みんなもしそうなら、私は次のように動作します。
some_command | sed 's/$/d/' | sed -f /dev/stdin test >output
ここでsome_command
ファイルから削除したい行番号を生成しますtest
。
最初は、sed
各行に a を追加して数値ストリームをスクリプトに変換します。行の読み取りは「行100の削除」と解釈されます。その後、これは実際のスクリプトとして2番目のスクリプト(スクリプトを読む)に供給され、ファイルに適用されます。sed
d
100d
sed
/dev/stdin
test
シェルでプロセスの置き換えに対応する内容を学びます。
sed -f <( some_command | sed 's/$/d/' ) test >output
ただし、その文字列を含む行のみを削除したい場合は、NA
愚かです。