【问题标题】:AWK file to split a column into two at spaceAWK 文件在空间将一列分成两部分
【发布时间】:2015-09-25 15:42:54
【问题描述】:

我想获取一个 csv 文件并使用 AWK 将一列拆分为两部分。该列是 $11 并且包含由空格分隔的单词。

我正在尝试使用

`awk -F ' ' -v OFS='|' '{ "$11=$11"; print }' | \`

我想获取第 11 列,使用 | 将其分成两部分作为分隔符,然后打印结果。

结果看起来像 -

输入

1|2|3|4|5|6|7|8|9|10|11|12|13|14|15
100|Cat|Dog|Sam|123|12345|11|G|Sam Sheparm|2121212|15*666BA  Dangers Of Cat Ownership|4/28/13|4/21/16|ACT|132132132132

预期输出

 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16
 100|Cat|Dog|Sam|123|12345|11|G|Sam Sheparm|2121212|15*666BA|Dangers Of Cat Ownership|4/28/13|4/21/16|ACT|132132132132

什么是使用空格将特定列(编号 11)拆分为两个价格的 AWK 命令。为什么我的 awk 命令不起作用?第 11 列看起来像 15*666BA Dangers Of Cat Ownership。我需要把它从中间的空间分开,所以它是两列。

【问题讨论】:

  • 您能否提供准确的输入以及预期的输出?
  • @AvinashRaj 我添加了确切的例子
  • 请分别提供输入和预期输出。
  • @AvinashRaj 我为您在两者之间添加了一个空格。它们是相同的文本,一个显示输入,另一个显示输出。
  • @Aaron 基本上,您只想将第 11 列拆分为 2,其中 1 为 15*666BA 为一,其余为一?

标签: regex bash awk


【解决方案1】:

你可以试试下面的 awk 命令。

$ awk -F'|' -v OFS="|" '{sub(/ +/,"|",$11)}1' file
1|2|3|4|5|6|7|8|9|10|11|12|13|14|15
100|Cat|Dog|Sam|123|12345|11|G|Sam Sheparm|2121212|15*666BA|Dangers Of Cat Ownership|4/28/13|4/21/16|ACT|132132132132

这会将第 11 列中的第一个或多个空格替换为管道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多