如何使用 awk 删除列的一部分

如何使用 awk 删除列的一部分

我有这个 :

2018:01:02-23:52:48
2018:01:02-23:52:48
2018:01:02-23:52:48
2018:01:03-09:26:20
2018:01:03-09:26:20

我想保留日期,但不保留小时,以便对每天的消息数量进行排序:

2018:01:02
2018:01:02
2018:01:02
2018:01:03
2018:01:03

如果可能的话我想这样做awk

答案1

  • awk

    awk -F- '$0=$1' file
    
  • cut -d- -f1 file
    
  • sed

    sed 's/-.*//' file
    
  • 珀尔

    perl -pe 's/-.*//' file
    

答案2

简单地与awk:

awk -F'-' '{ print $1 }' file
  • -F'-'--将(破折号)视为字段分隔符

但在你的简单情况下,grep方法会更简单:

grep -o '^[^-]*' file

答案3

如果输入仅有的包含时间戳,那么很容易将破折号设置为字段分隔符并仅打印第一个字段:

$ awk -F- '{print $1}' input
2018:01:02
2018:01:02

但如果里面还有其他东西,比如说input2包含

2018:01:02-23:52:48 some data 
2018:01:02-23:52:48 something else

那么这将删除该行的其余部分,并且对于其他处理,您可能也不想更改字段分隔符。但是您可以对第一个字段进行简单的替换并打印结果行:

$ awk '{sub(/-.*/, "", $1)} 1' input2
2018:01:02 some data
2018:01:02 something else

答案4

我通过下面的 awk 子字符串方法实现了相同的效果

 awk '{print substr($1,1,10)}'  filename

输出

2018:01:02
2018:01:02
2018:01:02
2018:01:03
2018:01:03

相关内容