从Linux中的文件输入创建新文件

时间:2017-11-21 17:03:11

标签: linux bash shell awk

我在名为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

如何获得正确的结果

2 个答案:

答案 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