Linux 如何操作awk输出?
如果我打字Linux 如何操作awk输出?,linux,bash,awk,Linux,Bash,Awk,如果我打字 echo '"";"";" 01.06.2011";"7";"01.06";"-21,00";"-6.097,73";' | awk -F';' '{print $3 " " $7}' 然后我得到 " 01.06.2011" "-6.097,73" 但我想要的是 " 01.06.2011" "-6097" 该怎么做呢?这样就行了。使用 或者是split()和sub()的组合 或者只使用sub() 相关文件: 拆分(字符串、数组、字段sep) 这把绳子分成几段 由fieldsep
echo '"";"";" 01.06.2011";"7";"01.06";"-21,00";"-6.097,73";' | awk -F';' '{print $3 " " $7}'
然后我得到
" 01.06.2011" "-6.097,73"
但我想要的是
" 01.06.2011" "-6097"
该怎么做呢?这样就行了。使用
或者是split()
和sub()
的组合
或者只使用sub()
相关文件:
拆分(字符串、数组、字段sep)
这把绳子分成几段
由fieldsep分隔,并将碎片存储在阵列中。第一件
存储在数组[1]中,第二块存储在数组[2]中,依此类推。这个
第三个参数fieldsep的字符串值是描述
where-to-split字符串(就像FS可以是描述到何处的regexp一样)
拆分输入记录)。如果省略字段sep,则FS的值为
用过。split返回创建的元素数。分裂
然后,函数以类似于
将输入行拆分为字段的方式。例如:
split(“auto-da-fe”,a“-”)将字符串auto-da-fe'拆分为三个
使用
-”作为分隔符的字段
它将数组的内容设置为a
如下所示:a[1]=“自动”a[2]=“da”a[3]=“fe”
AWK支持该函数,并且从内存中尽可能多地解析字符串作为整数。从你的例子来看:
awk-F';“”{printf(“%s%i”,$3,$7*1000);}'
会有用的。这也适用于任何尺寸的号码…
(由于数据中有双引号,以上不起作用,请参见下文…)
编辑:如果您使用的是gawk,则可以使用和的组合稳定地实现这一点
awk-F';“”{
gsub(/“/,”,$7);
printf(“%s\%i\”\n),$3,strtonum($7)*1000);
}“
gsub()
调用去掉引号,以便strtonum
不会阻塞引号,然后printf
调用将引号作为格式字符串的一部分放回…您可以尝试使用gsub函数:
echo '"";"";" 01.06.2011";"7";"01.06";"-21,00";"-6.097,73";' | awk -F';' '{gsub(/(,.*|\.)/,"",$7);print $3" "$7"\"";}'
它可以匹配多个条件。这可能是最短的解决方案。您可以添加逗号和双引号作为字段分隔符,并相应地进行调整
awk -F'[";,]' '{print "\""$8 " \""$21*1000"\""}'
输出
$awk-F'[“;,]”{print“\”“$8”\”“$21*1000”\”“}只需操纵$7
即可删除不需要的字符:
awk -F';' '{
gsub(/[.]/, "", $7)
sub(/,[0-9]*/, "", $7)
print $3, $7
}'
非常接近。我给出了“01.06.2011”“-6.097”
。
也应该删除。@SandraSchlichting已更正。可能有更好的方法,但这很有效。它输出“01.06.2011”0
。[。]
意思?我猜它删除了
,但是为什么需要方括号呢?正则表达式中的点是一个通配符,可以匹配任何单个字符。但是括号表达式中的点没有特殊意义:它只是一个点。另一种编写方法是使用转义:gsub(/\./,“”,$7)
echo '"";"";" 01.06.2011";"7";"01.06";"-21,00";"-6.097,73";' | awk -F';' '{gsub(/(,.*|\.)/,"",$7);print $3" "$7"\"";}'
awk -F'[";,]' '{print "\""$8 " \""$21*1000"\""}'
$ awk -F'[";,]' '{print "\""$8 " \""$21*1000"\""}' <<<'"";"";" 01.06.2011";"7";"01.06";"-21,00";"-6.097>
" 01.06.2011 "-6097"
awk -F';' '{
gsub(/[.]/, "", $7)
sub(/,[0-9]*/, "", $7)
print $3, $7
}'