Unixでは、カンマ区切りのファイルの特定の場所から文字と数字を削除したいと思います。
私のデータはこんな感じです
jagan1,*,*,*,*,*,W,24,25,26
jagan2,*,*,*,*,*,1,24,25,26
jagan3,*,*,*,*,*,*,24,25,26
jagan4,*,*,*,*,*,P,24,25,26
jagan5,*,*,*,*,*,*,24,25,26
7番目の位置では*だけを保持し、数字や文字があれば行全体を削除したいと思います。
次のように出力
jagan3,*,*,*,*,*,*,24,25,26
jagan5,*,*,*,*,*,*,24,25,26
答え1
簡単にawk
スクリプト:
$ awk -F, '$7 == "*"' file.csv
jagan3,*,*,*,*,*,*,24,25,26
jagan5,*,*,*,*,*,*,24,25,26
-F,
-,
入力フィールド区切り文字で(カンマ)を設定します。'$7 == "*"'
- 7番目のフィールドは次の行のみを考慮します。*
消す不要行は以下を使用sed
方法:
$ sed -Ei '/^([^,]+,){6}[^*],/d' file.csv
答え2
そしてミラー、-I
ファイルを任意の場所で編集するオプションを含めます。
mlr -I --csv --implicit-csv-header --headerless-csv-output filter '$7 == "*"' file.csv
答え3
入力ファイルがあり、in.txt
7番目の列にアスタリスクがある行をそのファイルにコピーするには、out.txt
次のgrepコマンドを使用します。
grep -E '^(([[:alnum:]]+|[*]),){6}\*' in.txt > out.txt
説明:最初に行の先頭(^
)を見てから、6つの連続した行を見てください。英数字またはアスタリスクコンマ ( (([[:alnum:]]+|[*]),)
;{6}
は反復回数を定義します) が続き、次の文字がアスタリスクであることを確認します。その場合、一致する行がにコピーされますout.txt
。
答え4
今回は、以下を試してみてください。
sed -i -Ee 's/^.*,[a-zA-Z0-9]*,[0-9]{2},[0-9]{2},[0-9]{2}$//' file && sed -i '/^$/d' file
フォーマットされた文字列をキャプチャし...,<number or character>,<two numbers>,<two numbers>,<two numbers><end of line>
て削除します。
空行を削除
'/^$/d'