我有数百个位置,其 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?
我很高兴得到一些想法或提示来解决这个问题。 谢谢, 尼尔斯
首先,让我们修复
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