我可以使用单个 cut 命令为输入文件的两个字段创建两个输出文件吗?

我可以使用单个 cut 命令为输入文件的两个字段创建两个输出文件吗?

我可以编写一个 shell 脚本来循环执行此操作,但是是否有使用终端的单行解决方案?

答案1

不是用一个cut命令。你可以这样做awk

awk -F '\t' '{print $1 > "file1"; print $2 > "file2"}' < file

或者对于每个领域:

awk -F '\t' '{for (i = 1; i <= NF; i++) print $i > "file" i}' < file

或者为了避免使用管道和 2 次调用来避免读取文件两次cut,使用像 AT&T ksh、zsh 或 bash 这样支持进程替换的 shell:

< file tee >(cut -f2 > file2) | cut -f1 > file1

当心kshbash不要等待对于cut在进程替换中运行的该命令,因此在这些 shell 中,file2当您运行之后的下一个命令时,可能尚未完成。

答案2

我认为你可以这样做:

cut -f1 input | tee output1 | cut -f1 > output2

如果您想要提交的是第一列和第二列。

相关内容