Awk 将制表符分隔的文件中的空字段替换为";0“;
假设我有一个数据文件,其中的行类似于Awk 将制表符分隔的文件中的空字段替换为";0“;,awk,sed,Awk,Sed,假设我有一个数据文件,其中的行类似于a^I^I^I^I^I^Ib^Ic,由^I分隔(表示一个选项卡) 现在,我想将每列的空值改为0,因此结果应该是:a^I0^I0^I0^I0^I0^Ib^Ic 如何仅使用一个sed命令实现此目标?使用支持前瞻性的工具更容易做到这一点: perl -pe 's/\t(?=\t)/\t0/g' file 这将在任何一对制表符之间放置一个“0”。前瞻是有用的,因为它匹配第二个选项卡而不使用它,所以可以在下一个匹配中使用它 以下是一种使用awk的方法: awk -F'
a^I^I^I^I^I^Ib^Ic
,由^I
分隔(表示一个选项卡)
现在,我想将每列的空值改为0,因此结果应该是:a^I0^I0^I0^I0^I0^Ib^Ic
如何仅使用一个sed命令实现此目标?使用支持前瞻性的工具更容易做到这一点:
perl -pe 's/\t(?=\t)/\t0/g' file
这将在任何一对制表符之间放置一个“0”。前瞻是有用的,因为它匹配第二个选项卡而不使用它,所以可以在下一个匹配中使用它
以下是一种使用awk的方法:
awk -F'\t' -v OFS='\t' '{ for (i = 1; i <= NF; ++i) sub(/^$/, 0, $i) } 1' file
awk-F'\t'-vofs='\t'{for(i=1;i使用支持前瞻的工具更容易做到这一点:
perl -pe 's/\t(?=\t)/\t0/g' file
这将在任何一对制表符之间放置一个“0”。超前搜索很有用,因为它匹配第二个制表符而不使用它,因此可以在下一个匹配中使用它
以下是一种使用awk的方法:
awk -F'\t' -v OFS='\t' '{ for (i = 1; i <= NF; ++i) sub(/^$/, 0, $i) } 1' file
awk-F'\t'-vofs='\t'{for(i=1;iotherawk
$ awk -v RS='\t' -v ORS='\t' '$0==""{$0=0}1'
或者用BEGIN块
$ awk 'BEGIN{RS=ORS="\t"} $0==""{$0=0}1'
另一个awk
$ awk -v RS='\t' -v ORS='\t' '$0==""{$0=0}1'
或者用BEGIN块
$ awk 'BEGIN{RS=ORS="\t"} $0==""{$0=0}1'
使用GNU时:
sed ':a;s/\t\(\t\|$\)/\t0\1/;ta' file
将所有\t
后跟\t
或行尾替换为\t0
使用GNU-sed:
sed ':a;s/\t\(\t\|$\)/\t0\1/;ta' file
$ awk '{while(gsub(/\t\t/,"\t0\t"));} 1' file
a 0 0 0 0 0 0 b c
将所有\t
后跟\t
或行尾替换为\t0
,这样您的真实数据就没有^ |
,它实际上有制表符?这样您的真实数据就没有^ |
,它实际上有制表符?这将在o的末尾添加一行,其中只包含一个制表符,没有终止换行utput使结果不是POSIX文本文件。这将在输出的末尾添加一行,其中只包含一个制表符,没有终止换行符,从而使结果不是POSIX文本文件。
$ awk '{while(gsub(/\t\t/,"\t0\t"));} 1' file
a 0 0 0 0 0 0 b c