为表中的特定项目创建文件夹

为表中的特定项目创建文件夹

我将数据组织在表格中(文本制表符分隔),如下所示:

NAME      TIME          ID        DATE 
--------
John        03:25:01    A10A      2015/05/12
Marry       01:01:15    N000M     2013/01/01
.
.
.
.

如何为该表中的每个名称创建文件夹?另外,如何将文件夹命名为 ID 和时间,如下所示:

For John the created folder name is A10A-032501
For Marry the created folder name is N000M-010115

答案1

tail -n+3 file | while IFS=$'\t' read -r name time id date; do mkdir "$id-${time//:/}"; done

运行后,将创建以下目录:

$ ls -d */
A10A-032501/  N000M-010115/

多线版本

有些人喜欢将 shell 代码分成多行:

tail -n+3 file | while IFS=$'\t' read -r name time id date
do
    mkdir "$id-${time//:/}"
done

怎么运行的

  • tail -n+3 file

    file这会在删除两个标题行后将其发送到标准输出。

  • while IFS=$'\t' read -r name time id date; do

    这将在 中的行上开始循环file。使用制表符作为分隔符 ,IFS=$'\t'将四列读入变量nametimeiddate

  • mkdir "$id-${time//:/}"

    这将创建目录。 ${time//:/}从时间字段中删除冒号。

  • done

    这标志着循环的结束。

答案2

假设数据位于“data.tsv”中:

sed -e '1,2d' data.tsv | while read myN myT myI myD; do mkdir $myI-${myT//:/} ; done

说明: sed 在文件 data.tsv 上运行“-e”表达式“d”删除行“1,2”

您的示例中没有一个值包含空格,因此我没有重新定义 IFS。

剩下的就是一个标准的 while 循环。

相关内容