awk OFS未产生期望值

纳比尔·穆杜(Nabeel Moidu)

我有一个档案

[root@nmk~]# cat file
abc>
sssd>
were>

我运行了awk命令的这些变体

[root@nmk~]# cat file | awk -F\>  ' { print $1}' OFS=','
abc
sssd
were

[root@nmk~]# cat file | awk -F\>  ' BEGIN { OFS=","}  { print $1}' 
abc
sssd
were
[root@nmk~]# 

但是我的预期输出是

abc,sssd,were

我的命令中缺少什么?

马克·里德

awk中的每一行输入都是一条记录,因此要设置的是输出记录分隔符ORSOFS变量保存输出字段分隔符,用于分隔每行的不同部分。

既然你是设置输入字段分隔符,FS>OFS,,一个简单的方法来看到这些作品是如何在后的文件的每一行补充一下>

awk 'BEGIN { FS=">"; OFS=","} {$1=$1} 1' <<<$'abc>def\nsssd>dsss\nwere>wolf'
abc,def
sssd,dsss
were,wolf

因此,您要设置ORS。默认的记录分隔符是换行符,因此您设置ORS来有效替换输入中的换行符。但这意味着,如果输入的最后一行包含换行符(通常是这种情况),那么最后一行还将获得新ORS的副本:

awk 'BEGIN { FS=">"; ORS=","}  1' <<<$'abc>def\nsssd>dsss\nwere>wolf'
abc>def,sssd>dsss,were>wolf,

它也根本不会换行,因为该换行被解释为输入记录分隔符,并变成了输出记录分隔符-它成为最后的逗号。

因此,您必须对要执行的操作更加明确:

  awk 'BEGIN { FS=">"          } # split input on >
      (NR>1) { printf ","      } # if not the first line, print a ,
             { printf "%s", $1 } # print the first field (everything up to the first >) 
         END { printf "\n"     } # add a newline at the end
      ' <<<$'abc>\nsssd>\nwere>'

输出以下内容:

abc,sssd,were

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

c的除法未给出期望值

来自分类Dev

Spock存根未返回期望值

来自分类Dev

COUNTIF公式未返回期望值

来自分类Dev

Ruby命令未返回期望值

来自分类Dev

前导零的数字文字不会产生期望值

来自分类Dev

BigInteger数学函数未返回期望值

来自分类Dev

字符串枚举未打印期望值

来自分类Dev

date.getTimezoneOffset()未返回期望值

来自分类Dev

Mock上的设置未返回期望值

来自分类Dev

正则表达式未返回期望值

来自分类Dev

math.h中的函数未返回期望值

来自分类Dev

Verilog在简单分配中未输出期望值

来自分类Dev

日期时间转换未返回期望值

来自分类Dev

Hibernate搜索通配符未返回期望值

来自分类Dev

字符串数组未返回期望值

来自分类Dev

DATEDIF()未返回期望值,如何计算月龄?

来自分类Dev

用重复值awk

来自分类Dev

从awk返回值

来自分类Dev

awk,重复值

来自分类Dev

AWK - 无法替换值

来自分类Dev

多个期望值dynamoDB

来自分类Dev

JSONDecodeError:期望值Python

来自分类Dev

opencv中的色彩空间转换(RGB-> LAB)-红色不会产生期望值

来自分类Dev

如何仅使用awk一次以产生不同的值

来自分类Dev

阿拉伯文化日期时间解析未返回期望值

来自分类Dev

具有日期条件的SQL窗口函数未返回期望值

来自分类Dev

Redshift中的REGEXP_SUBSTR函数未返回期望值

来自分类Dev

汇总列中的总值时,SQL查询未返回期望值

来自分类Dev

在一种特定情况下,函数未返回期望值