我有一个 CSV 文件,其中包含以下格式的数据
网址.csv
drive,http://www.drive.google.com/
wikipedia,https://en.wikipedia.org/wiki/%s
wolframalpha,http://www.wolframalpha.com/input/?i=%s
我想为第一列中的每个项目创建一个目录,并在该目录内创建一个与该目录同名的文本文件。即:它应该创建一个如图所示的文件结构。
├───drive
│ - drive.txt
│
├───wikipedia
│ - wikipedia.txt
│
└───wolframalpha
- wolframalpha.txt
每个文件的文件内容应如下所示
#!/bin/bash
echo [$@]
echo "command=xdg-open \" $url $@\""
echo "icon="
echo "subtext=Search on $keyword for $@"
其中$网址被替换为second column
和中的项目$关键字正在被 中的项目替换first column
。
编辑:
awk -F "," '{print $1,$2}' web_url.csv | awk '{system("mkdir "$1)}'
awk -F "," '{print $1,$2}' web_url.csv | awk '{print $1 > $1".txt"}'
测试文件
key=`awk -F "," '{print $1}' web_url.csv`
search_url=`awk -F "," '{print $2}' web_url.csv`
for word in $key; do
echo 'echo "command=xdg-open \"$url$@\""'
echo 'echo "icon="'
echo "echo "\"subtext=Search on $word for \$@""\"
done
输出
echo "command=xdg-open \"$url$@\""
echo "icon="
echo "subtext=Search on wikipedia for $@"
echo "command=xdg-open \"$url$@\""
echo "icon="
echo "subtext=Search on wolframalpha for $@"
echo "command=xdg-open \"$url$@\""
echo "icon="
echo "subtext=Search on drive for $@"
我不确定如何在文件夹内创建文件以及如何为每个文件创建文件内容,并且不将内容包含在单个文件中,如上面的输出所示。
另外,在输出中我没有得到那里的网址。
答案1
首先创建一个doit.sh
带有两个参数的脚本:关键字和 url:
#!/bin/bash
mkdir -p $1
cat > $1/$1.txt << EOF
#!/bin/bash
echo [\$@]
echo "command=xdg-open \\" $2 \$@\\""
echo "icon="
echo "subtext=Search on $1 for \$@"
EOF
使其可执行 ( chmod +x doit.sh
) 并对其进行测试,直到使用两个参数调用它才能获得正确的结果。 (mkdir
的-p
选项可防止抱怨目录已存在)。特别要注意转义 the$
并\
在输出中保留。
完成后,使用两个参数为每一行调用脚本:
awk -F "," '{print "./doit.sh " $1 " " $2}' web_url.csv | sh
按照您的做法,您会遍历所有关键字 ( for word in $key
),但没有匹配的 URL 来执行正确的操作。
我不确定如何解决这个问题,但如果您需要做多件事,请始终尝试正确地完成其中一件事,然后专注于如何多次使用该解决方案。由于不熟悉,awk
我必须在不将输出通过管道传输的情况下进行实验,sh
直到我可以看到doit.sh
将被正确调用:
awk -F "," '{print "./doit.sh " $1 " " $2}' web_url.csv
给出输出:
./doit.sh drive http://www.drive.google.com/
./doit.sh wikipedia https://en.wikipedia.org/wiki/%s
./doit.sh wolframalpha http://www.wolframalpha.com/input/?i=%s