linux - 使用 AWK 将文件的第一列拆分为多列

标签 linux unix awk split

文件看起来像这样,但有数百万行(TAB 分隔):

1_number_column_ranking_+   100 200 Target "Hello" 

我想用 _ 拆分第一列,这样它就变成了:

1 number column ranking + 100 200 Target "Hello"

这是我一直在尝试的代码:

awk -F"\t" '{n=split($1,a,"_");for (i=1;i<=n;i++) print $1"\t"a[i]}' 

但这并不是我所需要的。
感谢您提供任何帮助(关于该主题的其他主题对我没有帮助)。

最佳答案

无需拆分,只需替换即可:

awk 'BEGIN{FS=OFS="\t"}{gsub("_","\t",$1)}1'

例如:

$ cat file
1_number_column_ranking_+       100     200     Target "Hello"

$ awk 'BEGIN{FS=OFS="\t"}{gsub("_","\t",$1)}1' file
1       number  column  ranking +       100     200     Target "Hello"

gsub 将替换所有出现的地方,当没有给出第 3 个参数时,它将替换为 $0。
最后一个 1{print} 的快捷方式。 (始终为 true,隐含为 {print}。)

关于linux - 使用 AWK 将文件的第一列拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54202017/

相关文章:

c - 从c程序中查找后台进程的pid

shell - 通过 SSH 执行脚本并获取输出?

linux - 需要帮助在 shell 中获得两个数字之间的差距

bash - 使用 ps 和 awk 获取 pid,然后杀死它

awk - 使用 AWK 命令过滤和匹配两个文件中的数据时出错

C编程: write() integers to a text file

linux - 如何在Linux中打印使用pid和不使用pid的进程的内核堆栈的下限和上限地址

unix - Dig + trace不执行跟踪

linux - 将文件夹中的所有文件名传递给 bash 脚本,添加特殊附录

linux - Linux 上有可用的图像库来获取原始图像中剪切的小图像的位置吗?