【问题标题】:manipulate first field and then print rest of the line for csv files using awk操作第一个字段,然后使用 awk 打印 csv 文件的其余行
【发布时间】:2017-06-02 18:46:26
【问题描述】:

我有很多 csv 文件,我需要在其中操作包含日期的第一个字段,然后打印该行的其余部分。 这些文件具有不同的字段长度。

我的示例线是

"11.07.2016 00:00:00",DON1SOE02,PAPN,PAPN,OPEN1000,918945,

我试过下面的代码

awk -F"," '{print "\""substr($1,08,4)"-"substr($1,5,2)"-"substr($1,2,2)substr(‌​$1,12,9)"\","$0""}' file.csv    

这样的结果是

"2016-07-11 00:00:00","11.07.2016 00:00:00",DON1SOE02,PAPN,PAPN,OPEN1000,918945,

有什么办法可以避免打印未修改的日期字段,即“11.07.2016 00:00:00”

下面的解决方案有一种跳过第一列的方法,但我想修改第一列然后打印修改,然后跳过打印未修改的第一列

Using awk to print all columns from the nth to the last

【问题讨论】:

    标签: linux awk


    【解决方案1】:

    您必须为第一个字段提供新值:awk '{$1="..."}1。否则整行$0 将保持不变:

    awk -F, -v OFS=, '{$1="\""substr($1,8,4)"-"substr($1,5,2)"-"substr($1,2,2)""substr($1,12,9)"\""}1' file.csv
    

    【讨论】:

    • @fedorqui:确实像这样更清楚。谢谢。
    • 感谢您的出色解决方案。
    猜你喜欢
    • 1970-01-01
    • 2013-08-29
    • 2022-01-05
    • 2013-02-04
    • 2018-07-31
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    相关资源
    最近更新 更多