スクリプトによって自動的に生成された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
.app
INVALID
尾は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