Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 如何在分隔文件中提取固定长度的文本_Awk_Sed_Cut - Fatal编程技术网

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

Awk 如何在分隔文件中提取固定长度的文本,awk,sed,cut,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中的值拆分为逗号分隔的值,但不确定如何仅限制第一个值而忽略其他值 请引导我做这件事 s

我想从带分隔符的文件中提取一个字段

下面是我文件的内容-

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中的值拆分为逗号分隔的值,但不确定如何仅限制第一个值而忽略其他值

请引导我做这件事

sed 's/"\([^,]*\)[^"]*"/\1/'
也就是说,找到一个双引号,记住它后面的逗号,然后用记住的部分替换它后面的双引号


有关CSV的更重要的工作,请参阅Perl和。

考虑到您的输入文件与所示示例相同,如果是,则遵循
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',|“'
:为此处输入文件的每一行设置字段分隔符为

print
print
是现成的
awk
关键字,用于打印行/变量等

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

OFS=,
:在此处将输出字段分隔符设置为逗号


Input\u file
:在这里提到输入文件名。

请记住,字段4是空的,因为它位于
,“
@kvantour之间,我没有提到代码中的第4列。我知道,如果有人想知道为什么
$5
,而不是
$4
,如果你希望你也可以在gawk
awk'{print gensub(/“([^,]*)./”、“\\1”、“)}文件中添加这一点,那么这是一条一般性的评论,表明了这一微妙之处