1)我有一个看起来像这样的Source_File.csv
A;B;/Path/xx/file1_name
C;D;/anotherPath/yyyyy/file2_name
2)我想制作一个Target_File.csv
A;B;/Path/xx/;/Path/xx/file1_name
C;D;/anotherPath/yyyyy/;/anotherPath/yyyyy/file2_name
命令
cat Source_File.csv | awk -F";" '{print $1";"$2";"echo $3 |
cut -d'/' -f1,2,3";"$3}' >> Target_File.csv;
发出此错误
awk: {print $1";"$2";"echo $3 | cut -d/ -f1,2,3";"$3}
awk: ^ syntax error
提前感谢您的建议/建议
答案 0 :(得分:3)
无需使用cat
,cut etc, just
awk就足够了:
awk 'BEGIN{FS=OFS=";"} {s=$NF; sub(/[^\/]+$/, "", s); print $1,$2,s,$NF}' Source_File.csv
A;B;/Path/xx/;/Path/xx/file1_name
C;D;/anotherPath/yyyyy/;/anotherPath/yyyyy/file2_name
答案 1 :(得分:2)
使用sed:
sed 's|/.*/|&;&|' file
输出:
A;B;/Path/xx/;/Path/xx/file1_name C;D;/anotherPath/yyyyy/;/anotherPath/yyyyy/file2_name
如果您要“就地”修改文件,请使用sed的选项-i
。
答案 2 :(得分:-1)
您要做的是将目录名称和完整文件名称作为两个单独的组件提取。
您可以使用split()和数组作为 -
在awk中轻松完成此操作cat /tmp/t.csv | awk -F";" ' {n =拆分($ 3,a," /"); S1 ="&#34 ;; I = 1; 当我
A; B; //路径/ XX; /路径/ XX / file1_name ℃; d; // anotherPath / YYYYY; / anotherPath / YYYYY / file2_name
更容易使用bash而且可以
cat /tmp/t.csv | sed -e' s /; / / g' |读a b c;回声" $ a; $ b; dirname $c
; $ c" ;完成