仅捕获目录路径中的文件名

仅捕获目录路径中的文件名

要求

Col1 ,  Col2             ,         Col3         ,   Col4
1   , a:/b/c/abc.txt          , f:/b/c/abc1.txt , a:/b/c/abc6.txt 
2   , b:/bd/a/s/3/d/mon.dat   , g:/b/c/abc 2.txt, b:/b/c/ab7.txt 
3   , c:/j/h/4/u/y/d/m/ttt.dat, h:/b/c/abc 3.txt, c:/b/c/abc 8.txt 
4   , c:/j/h/4/test1.msg      , i:/b/c/abc4.txt , d:/b/c/abc 9.txt
5   , d:/iasa/dda/dia/yyy.dat , j:/b/c/abc5.txt , e:/b/c/abc 10.txt

期待 O/P

Col1  ,    Col2     ,    Col3    ,   Col4                      
1  ,       abc.txt   ,   abc1.txt ,  abc6.txt
2  ,       mon.dat   ,   abc2.txt  , abc7.txt
3  ,       ttt.dat   ,   abc3.txt  , abc8.txt
4  ,       test1.msg ,   abc4.txt  , abc9.txt
5  ,       yyy.dat   ,   abc5.txt  , abc10.txt

答案1

由于我无法推断出空间分布中的任何系统,我只是猜测了一些格式。随意适应口味。

awk -F, '{gsub (/ |\r/, ""); printf "%-4s ", $1; for (i=2; i<=NF; i++) {n=split($i, T, "/"); printf ", %-10s ", T[n]} printf RS}' OFS=, file
Col1 , Col2       , Col3       , Col4       
1    , abc.txt    , abc1.txt   , abc6.txt   
2    , mon.dat    , abc2.txt   , ab7.txt    
3    , ttt.dat    , abc3.txt   , abc8.txt   
4    , test1.msg  , abc4.txt   , abc9.txt   
5    , yyy.dat    , abc5.txt   , abc10.txt  

答案2

使用sedcolumn

$ sed 's/ //g; s/,[^,]*\//,/g; s/,/ , /g' file | column -t
Col1  ,  Col2       ,  Col3      ,  Col4
1     ,  abc.txt    ,  abc1.txt  ,  abc6.txt
2     ,  mon.dat    ,  abc2.txt  ,  ab7.txt
3     ,  ttt.dat    ,  abc3.txt  ,  abc8.txt
4     ,  test1.msg  ,  abc4.txt  ,  abc9.txt
5     ,  yyy.dat    ,  abc5.txt  ,  abc10.txt
  • 将所有空格字符替换为空字符串
  • 将所有,后面跟着的非,字符替换为/a,
  • 全部替换,,
  • 将输出漂亮地打印为表格column

相关内容