如何在分隔文件中提取具有固定长度的文本

时间:2018-01-30 09:50:23

标签: awk sed cut

我想从分隔文件中提取字段。

以下是我文件的内容 -

A,B,C,"01/02/2015,01/03/2016,02/26/2017",01,56
A,B,G,"01/02/2012,01/03/2011,02/26/2010",01,56

我想只检索每行中的第一个日期,并用该值替换整个列。

输出

A,B,C,01/02/2015,01,56
A,B,G,01/02/2012,01,56

我知道我可以将" s中的值拆分为逗号分隔值,但不确定如何仅限制第一个值并省略其他值。

请指导我。

2 个答案:

答案 0 :(得分:3)

sed 's/"\([^,]*\)[^"]*"/\1/'

即。找到一个双引号,记住它后跟逗号的内容,并用记住的部分将其替换为以下双引号。

有关使用CSV进行更严肃的工作,请参阅Perl和Text::CSV_XS

答案 1 :(得分:0)

考虑到您的Input_file与显示的示例相同,如果是,那么关注awk可以帮助您。

awk -F',|"' '{print $1,$2,$5,$(NF-1),$NF}' OFS=,   Input_file

输出如下。

A,B,01/02/2015,01,56
A,B,01/02/2012,01,56

说明:

-F',|"':在此处为每行Input_file设置字段分隔符为,"

printprint是开箱即用的awk关键字,用于打印行/变量等。

$1,$2,$5,$(NF-1),$NF:打印$1(当前行的第一个字段),$2(当前行的第二个字段),$5(当前行的第五个字段),{ {1}}(seconf当前行的最后一个字段)和$(NF-1)(当前行的最后一个字段)。

$NF:在此处将输出字段分隔符设置为逗号。

OFS=,:这里提到输入文件名。