我有一个包含数字数据的文件。每行都有不同数量的列。我想根据一行中的列数将文件拆分为多个文件。每行可能有 1-10 之间的列
下面是一个示例输入
file.txt
23 53;
34;
31 45 67;
46 78 95;
34 17;
19;
37 65 83;
目标输出
file_1column.txt
34;
19;
file_2column.txt
23 53;
34 17;
file_3column.txt
31 45 67;
46 78 95;
37 65 83;
答案1
"file_" and
使用 awk,通过将固定字符串“column.txt”与内部变量NF
(包含每个输入记录或行中的字段数或列数)连接来创建所需的文件名:
awk '{print > "file_" NF "column.txt"}' file.txt
结果:
$ head file_?column.txt
==> file_1column.txt <==
34;
19;
==> file_2column.txt <==
23 53;
34 17;
==> file_3column.txt <==
31 45 67;
46 78 95;
37 65 83;
答案2
我们也可以使用下面的命令
命令
split -l 3 file.txt
它将分成 3 个文件,分别是 xaa、xab、xcc 现在我们重命名 xaa==:file_xaa 等等
ls -ltr xa*| awk '{print "mv" " " $NF " " "file_"$NF}'| sh
n@praveen:~$ cat file_xaa
23 53;
34;
praveen@praveen:~$ cat file_xab
31 45 67;
46 78 95;
34 17;
praveen@praveen:~$ cat file_xac
19;
37 65 83;