2024-04-25 05:57:09 发布
网友
我有这样一个文本文件:
... NAME : name-1 ... NAME : name-2 ... ... ... NAME : name-n ...
我希望输出如下文本文件:
name_1.txt : NAME : name-1 ... name_2.txt : NAME : name-2 ... ... name_n.txt : NAME : name-n ...
我有grep,sed,awk,shell脚本,python的基本知识。你知道吗
awk救命!你知道吗
awk
$ awk '$1=="NAME"{f=$NF".txt"; print > f; close(f)}' file
这给了
$ head nam* ==> name-1.txt <== NAME : name-1 ==> name-2.txt <== NAME : name-2 ==> name-n.txt <== NAME : name-n
Solution:
awk '{x=gensub("-","_","g",$3)".txt"; print x" : " $0}' names.csv name_1.txt : NAME : name-1 name_2.txt : NAME : name-2
**gensub**在这里就可以了。 请阅读下面的字符串函数链接,它应该真的帮助你。string functions in awk
**gensub**
使用GNU sed:
sed "s/\(.*\)\(name-.*\)/echo '\1 \2' > \2.txt/;s/-/_/2e" input-file
NAME : name-2
echo "NAME : name-2" > name-2.txt
echo "NAME : name-2" > name_2.txt
_
-
e
这会将空行输出到stdout,但会为每个匹配行创建一个文件。你知道吗
这取决于文件只有与此格式匹配的行。。。但是您可以在这里扩展要点,用n跳过其他行。你知道吗
n
awk
救命!你知道吗这给了
**gensub**
在这里就可以了。 请阅读下面的字符串函数链接,它应该真的帮助你。string functions in awk使用GNU sed:
sed "s/\(.*\)\(name-.*\)/echo '\1 \2' > \2.txt/;s/-/_/2e" input-file
NAME : name-2
变成echo "NAME : name-2" > name-2.txt
echo "NAME : name-2" > name_2.txt
的_
替换第二个-
e
让shell运行在模式缓冲区中构造的命令。你知道吗这会将空行输出到stdout,但会为每个匹配行创建一个文件。你知道吗
这取决于文件只有与此格式匹配的行。。。但是您可以在这里扩展要点,用
n
跳过其他行。你知道吗相关问题 更多 >
编程相关推荐