Linux:创建由文件中的两个合并列命名的目录

问题描述 投票:0回答:1

我有数百个位置,其 ID 号存储在两列中作为 .xlsx 文件。 现在我需要创建以每一行命名的单个目录,例如:

ID | Location
01 | 100  
02 | 101
03 | 102
...

最终目录名称:

01_100
02_101
03_102
...

我使用了一些我在网上找到的命令,例如合并由“_”分隔的前两列:

awk '{print "$0"_"$1"}' file.xlsx

然而,它对我不起作用。

并从 csv 格式的行创建目录:

$ cat file.csv | xargs mkdir

如果我将初始文件存储为 csv 就可以了,但输出看起来像

1,100?

我很高兴得到一些想法或提示来解决这个问题。 谢谢, 尼尔斯

awk directory mkdir
1个回答
0
投票

首先,让我们修复

FS
,这样
$1
$2
将被创建并且你打算使用它们。

如果你有一个空格,一个文字

|
然后一个空格,你会这样做:

awk -F' \\| ' #rest of the awk

如果你可能有制表符、多个空格等,你会这样做:

awk -F'[[:blank:]]+[|][[:blank:]]+' # rest of the awk

awk 中的字符串连接运算符是字符串之间的空格。所以你会做

{print "$0" _ "$1"} #(note the space). 

更好的是

{printf("%s_%s\n", $1, $2)

所以你可以这样做:

awk -F' \\| ' 'FNR>1{printf "%s_%s\n",$1,$2}' file 

印花:

01_100  
02_101
03_102

一旦你有了它,就在 Bash 循环中使用它:

while read -r dir; do
    echo "making $dir"
    mkdir "$dir"
done < <(awk -F' \\| ' 'FNR>1{printf "%s_%s\n",$1,$2}' file)

或使用

xargs

awk -F' \\| ' 'FNR>1{printf "%s_%s\n",$1,$2}' file | xargs -n 1 mkdir   

或者您可以从

system
内部调用
awk

awk -F' \\| ' 'FNR>1{system(sprintf("mkdir %s_%s\n",$1,$2))}' file
© www.soinside.com 2019 - 2024. All rights reserved.