拆分制表符分隔的列,其中包含空格

时间:2017-03-20 06:10:40

标签: unix awk command

我在点击详细信息文件(clickInfo.txt)中有以下数据,其中有3个列由制表符分隔。 第1列表示以空格分隔的count和productId。

101 111    productXyz      keyword1
 57 111    productXyz      keyword2
 12 222    product ABC12      keyword3

我使用了以下awk命令来提取第1列,第2列和第3列

 awk -F'\t' '{print $1 $2 $3 }' clicksInfo.txt

从第一栏开始,我只想要计数而不是产品ID如下:

101     productXyz      keyword1
 57     productXyz      keyword2
 12     product ABC12      keyword3

那么如何用空格作为分隔符来拆分列(制表符分隔)?

4 个答案:

答案 0 :(得分:3)

您可以split再次space第1列并打印第一部分,尝试:

awk -F'\t' '{split($1, c, " "); print c[1] "\t" $2 "\t" $3}' clicksInfo.txt

答案 1 :(得分:1)

只需将第一个字段($1)中的空格及其后的所有内容(如果有)替换为""

$ awk 'BEGIN{FS=OFS="\t"}{sub(/ .*/,"",$1)}1' foo
101     productXyz      keyword1
57      productXyz      keyword2
12      product ABC12   keyword3

答案 2 :(得分:1)

使用sed时,假设第一列始终有两列数字,以空格分隔

$ sed -E 's/ *[0-9]+[ \t]*/\t/2' clicksInfo.txt 
101     productXyz      keyword1
 57     productXyz      keyword2
 12     product ABC12      keyword3
  • -E使用ERE,某些sed版本需要-r选项
  • *可选空间
  • [0-9]+[ \t]*一个或多个数字后跟可选空格/标签
  • /\t/2仅使用标签
  • 替换第二次此类事件

答案 3 :(得分:0)

@Gunjan:@try:虽然你的问题不是很清楚,但考虑到你只需要获得第一列,那么为什么不打印只需1美元。此外,如果使用空格默认分隔符本身,我们可以执行不确定为什么需要将制表符作为分隔符的任务。

awk '{print $1}' Input_file