提取列中 csv 文件名的部分内容

提取列中 csv 文件名的部分内容

我的目录中有一组 .csv 文件,例如

abc_q1_w1.csv
defg_q11_w2.csv
hijk_q11_w3.csv 

我想编写一个脚本来提取部分文件名并将它们放入列中,即

abc     q1      w1
defg    q11     w2
hijk    q11     w3

有谁知道如何使用 bash 脚本实现这种文件名提取?

答案1

你可以使用类似的东西:

ls -1 | tr '_' '\t'

答案2

使用 sed

$ printf "%s\n" * | sed 's/.csv$//; s/_/\t/g'
abc     q1      w1
defg    q11     w2
hijk    q11     w3

怎么运行的:

  • printf "%s\n" *每行打印一个文件名

  • s/.csv$//删除尾随的.csv.

  • s/_/\t/g将 转换_为制表符。

使用bash

$ for f in *; do f="${f%.csv}"; printf "%s\n" "${f//_/$'\t'}";  done
abc     q1      w1
defg    q11     w2
hijk    q11     w3

如果有助于清晰起见,上面的代码可以分为多行:

for f in *
do
    f="${f%.csv}"
    printf "%s\n" "${f//_/$'\t'}"
done

${f%.csv}删除尾随.csv并将${f//_/$'\t'}所有转换_为制表符。

我们不使用echo此任务,因为如果其中一个文件名以 开头-,许多 shell 会尝试将该文件名解释为选项,结果不会很好。

从不同的目录运行代码

$ for f in "$dir"/*; do f="${f#$dir/}"; f="${f%.csv}"; printf "%s\n" "${f//_/$'\t'}";  done
abc     q1      w1
defg    q11     w2
hijk    q11     w3

相关内容