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