在awk中使用cut来提取字段的子字符串

时间:2016-02-07 09:21:26

标签: bash awk cut

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

提前感谢您的建议/建议

3 个答案:

答案 0 :(得分:3)

无需使用catcut 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" ;完成