我在名为tables.txt
的文件中有一些表名。
表名在
之下123_test
123_testing
123_testing_1
234_test
234_testing
234_testing_1
现在我想创建如下文件
test
123_test
234_test
testing
123_testing
234_testing
testing_1
123_testing_1
234_testing_1
我试过以下
while read -r line ; do
echo "$line" >> "${line%%_*}.txt"
done < tables.txt
但我得到了
123.txt
123_test
123_testing
123_testing_1
234.txt
234_test
234_testing
234_testing_1
如何获得正确的结果
答案 0 :(得分:2)
您可以将此awk
命令用于此作业:
awk '{fn=$0; sub(/[^_]*_/, "", fn); print >> fn; close(fn)}' file
sub
函数将删除起始非下划线文本,后跟下划线。
答案 1 :(得分:1)
%
用于删除后缀,您应该使用#
删除前缀
while read -r line; do
echo "$line" >> "${line#*_}.txt"
done < tables.txt