CSVファイルのパス名を切り捨てる

CSVファイルのパス名を切り捨てる

3番目またはn番目の文字が発生した後、CSVの特定の列にあるデータを切り捨てようとするフィルタが原因で問題が発生しています\

私のデータは次のとおりです。

data,data,c:\path1\folder2\folder3\folder4\...,data,data,data
data,data,c:\path1\folder2\folder3\folder4\...,data,data,data
data,data,c:\path1\folder2\folder3\folder4\...,data,data,data
data,data,c:\path1\folder2\folder3\folder4\...,data,data,data

フィルタは次のものを生成したいと思います。

data,data,c:\path1\folder2\folder3\,data,data,data

3番目の列には、1つのフォルダーから複数のフォルダーまでどこにでも配置できるファイルパスが含まれています。最大3つのフォルダを持ちたいです。

他の残りの列を削除したくなく、ファイルをその場で編集したいと思います。

awk私は、、sedコマンドcutをステートメントcut -f1-4 -d '\'に結合しようとしましたが、awk一生の間それを動作させることはできません。

ベストアンサー1

GNU awkを使用してgensub()を実行します。

$ awk -v n=3 'BEGIN{FS=OFS=","} {$3=gensub("(([^\\\\]*\\\\){"n+1"}).*","\\1",1,$3)} 1' file
data,data,c:\path1\folder2\folder3\,data,data,data
data,data,c:\path1\folder2\folder3\,data,data,data
data,data,c:\path1\folder2\folder3\,data,data,data
data,data,c:\path1\folder2\folder3\,data,data,data

または awk を使用してください。

$ awk -v n=3 'BEGIN{FS=OFS=","} match($3,"(([^\\\\]*\\\\){"n+1"})"){$3=substr($3,1,RLENGTH)} 1' file
data,data,c:\path1\folder2\folder3\,data,data,data
data,data,c:\path1\folder2\folder3\,data,data,data
data,data,c:\path1\folder2\folder3\,data,data,data
data,data,c:\path1\folder2\folder3\,data,data,data

おすすめ記事