Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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
Perl awk或sed CSV文件操作_Perl_Unix_Sed_Awk - Fatal编程技术网

Perl awk或sed CSV文件操作

Perl awk或sed CSV文件操作,perl,unix,sed,awk,Perl,Unix,Sed,Awk,我想打印第一列和第二列,不需要任何额外字符,我想消除所有(“,和第三列),谢谢 "a004-1b","North","at006754" "a004-1c","south","atytgh0" "a004-1d","east","atrthh" "a010-1a","midwest","atyu" "a010-1b","south","rfg67" 上面的脚本甚至将处理嵌入双引号或逗号的字段。唯一的缺点(如果可以这样称呼的话)是第一个字段从$2开始 概念证明 如果您想要“纯”awk或sed,这

我想打印第一列和第二列,不需要任何额外字符,我想消除所有(“,和第三列),谢谢

"a004-1b","North","at006754"
"a004-1c","south","atytgh0"
"a004-1d","east","atrthh"
"a010-1a","midwest","atyu"
"a010-1b","south","rfg67"
上面的脚本甚至将处理嵌入双引号或逗号的字段。唯一的缺点(如果可以这样称呼的话)是第一个字段从
$2开始

概念证明 如果您想要“纯”awk或sed,这将不符合要求,但除此之外,它还可以工作:

$ awk -F'^"|","|"$' '{print $2,$3}' ./infile.csv
a004-1b North

a004-1c south

a010-1a midwest

a010-1b south

如果您正在为此使用
awk
,为什么要在其上加一个Perl标记

在Perl中:

awk -F, '{print $1 " " $2}' | tr -d '"'

您需要GNU Awk 4才能工作:

awk -F'\"|\,' '{print $2,$5}' sample
我喜欢这个新的“场模式”功能。这是我的新锤子,一切都是钉子。请在网站上阅读


(以这种方式编写,它不考虑嵌入的逗号或引号,因为问题表明这是不需要的。)

不处理嵌入的双引号:

$ gawk -vFPAT='[^",]+' '{print $1,$2}'
要处理这些问题:

sed -e 's/^"\([^"]*\)","\([^"]*\)".*/\1 \2/'

上述方法甚至适用于1或2字段输入。

虽然它不处理嵌入的引号或逗号,但后者在我的经验中并不太常见(不幸)。是的,不管有多复杂,切换到Python或其他内置CSV支持的东西都是有意义的。
cut-d“,“-f1,2——输出分隔符=“”|tr-d'“
也会这样做,所以这里不需要awk。@jfgagne,非常正确,但OP指定了awk或sed。就我个人而言,我更喜欢剪。在我的辩护中,我几乎不再使用awk或sed:^\n我必须承认我的大部分
awk
sed
用法就在这里,所以=)你不需要省略引号或逗号,
awk-F'“|,”
就足够了。但与其他一些答案一样,这不适用于带有嵌入引号或逗号的字段。相反,请使用
awk-F'^“|”、“|”$
,它会处理所有的角盒。
$ gawk -vFPAT='[^",]+' '{print $1,$2}'
sed -e 's/^"\([^"]*\)","\([^"]*\)".*/\1 \2/'
sed -n -e 's/^"//;s/"$//;s/","/ /;s/","/\n/;P'