awk从多列行中排除特定列
如何使用awk排除以300开头的列,而不排除以300开头的列?比如说 输入:awk从多列行中排除特定列,awk,Awk,如何使用awk排除以300开头的列,而不排除以300开头的列?比如说 输入: 100230070 100214996 100214992 300230217 100227462 100231344 100223007 100230055 300000213 300000180 100230295 100230295 100222531 100230174 100230051 输出: 100230070 100214996 100214992 100227462 100231344 100223
100230070 100214996 100214992 300230217 100227462 100231344
100223007
100230055
300000213 300000180 100230295
100230295 100222531 100230174 100230051
输出:
100230070 100214996 100214992 100227462 100231344
100223007
100230055
100230295
100230295 100222531 100230174 100230051
尝试一下这款awk one liner:
awk '{for(i=1;i<=NF;i++)sub(/^300.*/," ",$i)}
1+gsub(/ +/," ")+sub(/^ /,"")' file
awk'{for(i=1;i试试这个awk一行:
awk '{for(i=1;i<=NF;i++)sub(/^300.*/," ",$i)}
1+gsub(/ +/," ")+sub(/^ /,"")' file
awk'{for(i=1;i下面的awk
可能会对您有所帮助
awk '{for(i=1;i<=NF;i++){if($i~/^300/){$i=""}};gsub(/[[:space:]]+/,FS);gsub(/^[[:space:]]+|[[:space:]]+$/,"")} 1' Input_file
awk'{for(i=1;i下面的awk
可能会对您有所帮助
awk '{for(i=1;i<=NF;i++){if($i~/^300/){$i=""}};gsub(/[[:space:]]+/,FS);gsub(/^[[:space:]]+|[[:space:]]+$/,"")} 1' Input_file
awk'{for(i=1;i另一个awk
awk '{for(i=1;i<=NF;i++){if($i!~/^300/)printf "%s"$i FS};printf "%c","\n"}' infile
awk'{for(i=1;i另一个awk
awk '{for(i=1;i<=NF;i++){if($i!~/^300/)printf "%s"$i FS};printf "%c","\n"}' infile
awk'{for(i=1;i使用不带任何循环的awk:
awk '{gsub("^(300[^ ]* )+|( 300[^ ]*)+","")}1' file
不需要的数字(以300
开头)可以位于行的开头或中间。可以删除at数字的多个连续序列(使用+
regex运算符)
这显然可以在sed
中轻松翻译:
sed -E 's/^(300[^ ]* )+|( 300[^ ]*)+//' file
使用不带任何循环的awk:
awk '{gsub("^(300[^ ]* )+|( 300[^ ]*)+","")}1' file
不需要的数字(以300
开头)可以位于行的开头或中间。可以删除at数字的多个连续序列(使用+
regex运算符)
这显然可以在sed
中轻松翻译:
sed -E 's/^(300[^ ]* )+|( 300[^ ]*)+//' file
gsub
bing的另一个变体,但使用FS
和$1=$1
删除前导的FS
s:
$ awk '{gsub("(^|" FS ")300[^" FS "]*","");$1=$1}1' file
100230070 100214996 100214992 100227462 100231344
100223007
100230055
100230295
100230295 100222531 100230174 100230051
gsub
bing的另一个变体,但使用FS
和$1=$1
删除前导的FS
s:
$ awk '{gsub("(^|" FS ")300[^" FS "]*","");$1=$1}1' file
100230070 100214996 100214992 100227462 100231344
100223007
100230055
100230295
100230295 100222531 100230174 100230051
awk'{for(i=1;i awk'{for(i=1;i几乎。第一行合并了两列:100230070 100214996 10021499210027462100231344@JonyD现在应该可以了。差不多。第一行合并了两列:10023007100214996 1002149921002727462100231344@JonyD现在它应该走了。我正在尝试构建这个正则表达式…当然是最好的解决方案。这个似乎太难了+“,”)}1'或sed的//300[^]*//g'@ctac_u不完全正确,第四行开头有一个额外的空间,您是对的,只需使用第一行进行测试。使用sed,只需在末尾添加s/^*//,但使用awk,您的答案更好。@ctac_u若要消除额外的空间,请使用$1=$1
重新生成记录,即awk'{gsub(^(^))(300[^]*)+“,”;$1=$1}1'文件
我试图构建这个正则表达式…当然是最好的解决方案。这个似乎太难了,{gsub((^))(300[^]*)+“,”)}1'或sed的/^\\ 300[^]*//g'@ctac_u不完全正确,第四行的开头有一个额外的空格。你是对的,只使用第一行进行测试。使用sed,只需在末尾添加s/^*//但是使用awk,你的答案更好。@ctac_u若要消除多余的空格,请使用$1=$1
重新生成记录,即awk'{gsub((^)(300[^]*+),“;$1=$1}1'文件