我正在尝试拆分一个非常长的文本文件,如下所示:
AA1 0.1 0.2 0.3
AA2 0.5 0.6 0.7
AA3 0.5 0.1 0.3
我想将每行保存在一个单独的文本文件中。我知道split命令会执行它以及以下awk命令:awk' {filename = FILENAME NR;打印>文件名;关闭(文件名)}'
但我希望每个下一个文件都在第一列之后命名,如下所示:
AA1.txt
AA2.txt
AA3.txt
有没有简单的方法呢?
由于
答案 0 :(得分:2)
您可以使用非常简单的awk脚本
awk '{print $0 > $1".txt"}' inputFile
将创建文件
AA1
AA2
AA3
测试
$ ls AA*
AA1 AA2 AA3
$ cat AA1
AA1 0.1 0.2 0.3
$ cat AA2
AA2 0.5 0.6 0.7
$ cat AA3
AA3 0.5 0.1 0.3
答案 1 :(得分:2)
您可以使用:
awk '{print >> $1".txt"; close($1".txt")}' input.txt
它使用第一列的值($1
)加上扩展名“.txt”作为当前行的输出文件的名称。
正如您在问题中已经显示的那样,之后关闭文件是一个好主意,因为大输入文件中第一列中的太多不同值可能导致打开文件描述符太多。
如果你想省略输出中的第一列 - 因为它不会改变 - 你可以使用它:
awk '{for(i=2;i<=NF;i++){printf "%s ", $i >> $1".txt"};printf "\n" >> $1".txt"; close($1".txt")}' input.txt
它从第二列开始迭代每一列,最后添加一行。
答案 2 :(得分:2)
您可以通过将输入文本输入到awk或使用输入文件作为awk的参数来使用以下内容
cat test.txt | awk '{ print $0 > $1.txt }'
或
awk '{ print $0 > $1.txt }' test.txt
答案 3 :(得分:0)
使用awk
awk '{cmd="echo " $0 ">" $1; system(cmd)}' file
如果你不想要第1列
awk '{cmd="echo " $2" "$3" "$4 ">" $1 ;system(cmd)}' file