awk または sed を使用して、前のコマンドの変数に基づいてファイルから行を削除します。

awk または sed を使用して、前のコマンドの変数に基づいてファイルから行を削除します。

文字列と数字を含むCSVファイル(temp.csvなど)があります。行の先頭に特定の文字列パターンを含むファイルの行を削除する必要があります。たとえば、これは私のファイルです。

req1,incl_patt1,excl_patt1,2,ind1
req1,incl_patt2,excl_patt2,1,ind1
req1,incl_patt3,excl_patt3,4,ind1
req2,inc_patt1,exc_patt1,1,ind2
req2,inc_patt2,exc_patt2,2,ind2
req2,inc_patt3,exc_patt3,3,ind2
req3,pattern3,expatt3,1,ind3
req4,pattern4,expatt4,1,ind4

req_file_currコマンドにパターンを作成しています。~ $ req_file_curr=req1

echo "${req_file_curr}"次のように出力を提供します。req1

しかしsed以下のようにコマンドを実行します。

sed '/\"${req_file_curr}\"/d' temp.csv

次のように出力を提供します。

req1,incl_patt1,excl_patt1,2,ind1
req1,incl_patt2,excl_patt2,1,ind1
req1,incl_patt3,excl_patt3,4,ind1
req2,inc_patt1,exc_patt1,1,ind2
req2,inc_patt2,exc_patt2,2,ind2
req2,inc_patt3,exc_patt3,3,ind2
req3,pattern3,expatt3,1,ind3
req4,pattern4,expatt4,1,ind4

出力になると予想します。

req2,inc_patt1,exc_patt1,1,ind2
req2,inc_patt2,exc_patt2,2,ind2
req2,inc_patt3,exc_patt3,3,ind2
req3,pattern3,expatt3,1,ind3
req4,pattern4,expatt4,1,ind4

シェルの変数をパターンとして使用する方法sedまたはawk

ベストアンサー1

sedシェルが変数を渡す前に変数を拡張できるように、パターンを二重引用符で囲む必要がありますsed

sed "/^${req_file}/d" temp.csv

また、このパターンが線の先頭に表示されることを^示すためにアンカーポイントを使用する必要があります。sed

おすすめ記事