csvファイルから2列の値を取得し、値がある場合は「無効」を挿入してセルを右に移動します。

csvファイルから2列の値を取得し、値がある場合は「無効」を挿入してセルを右に移動します。

スクリプトによって自動的に生成されたcsvファイルがありますが、受信した特定のレコード(アイテム)の列2を検索し、値に「* .app」が含まれている場合は、列2に「INVALID」を印刷する必要があります。そして、セルを右に移動します。

データファイルの例:

   DOM,PROJ,APP,USER,DATE,TIME,STATUS
   www,test,biz.app,bob,6-1-18,09:33,OK   //Example of good line    
   www,biz.app,tony,7-11-17,06:22,ok      //Example of bad line
   ...

   Wanted output:
   DOM,PROJ,APP,USER,DATE,TIME,STATUS
   www,test,biz.app,bob,6-1-18,09:33,OK     
   www,INVALID,biz.app,tony,7-11-17,06:22,ok   //Example of fixed line
   ...

awk、sed、if文を試しましたが、成功しませんでしたが、必要な結果が得られませんでした。

    e.g.

    if [ awk -F',' '{ print $2 } < FILE' ] == "*.app" ; then ; echo "INVALID"; fi

これは間違いなく悪いことです...初めてbashに触れてくれてありがとう!

ベストアンサー1

awk -F, -vOFS=, '$2 ~ /\.app$/ { for (i = NF + 1; i > 2; --i) $i = $(i-1); $2 = "INVALID" } 1' file >newfile

このnewfileコマンドは、入力フィールドと出力フィールドの区切り文字をコンマに設定し、値の末尾にある文字列と一致する正規表現に基づいて2番目の列の値をテストしますfile。テストが成功すると、レコード内のフィールドは右に1位置移動し、文字列を新しい2番目のフィールドにするためのスペースが確保されます。awk.appINVALID

尾は1次のように置き換えることができます{ print }(これによりすべての行が出力されます)。

与えられたサンプルデータの場合、出力ファイルには以下が含まれます。

DOM,PROJ,APP,USER,DATE,TIME,STATUS
www,test,biz.app,bob,6-1-18,09:33,OK
www,INVALID,biz.app,tony,7-11-17,06:22,ok

おすすめ記事