我需要提取包含在我的csv列中的字符串。
我的档案是这样的:
col1;col2;col3;cleavage=10-11;
col1;col2;col3;cleavage=1-2;
col1;col2;col3;cleavage=100-101;
col1;col2;col3;none;
所以,我文件的分隔符是&#34 ;;"但在第4列中,我想在" cleavage ="之间提取字符串。和" - "。我所做的是在" cleavage ="之后打印2个字符,但它并不总是2个字符。
我是这样做的:
awk -F "\"*;\"*" '{if (match($4,"cleavage=")) print $1";"$2";"$3";"substr($4,RSTART+9,2); else print $1";"$2";"$3";0"}' file
我发现以下内容应该是正确的命令,但我应该如何将其整合到上一个命令中呢?
awk "/Pattern1/,/Pattern2/ { print }" inputFile
感谢您的帮助! :)
编辑: 我的实际输出是
col1;col2;col3;10;
col1;col2;col3;1-;
col1;col2;col3;10;
col1;col2;col3;0;
但我想要的是:
col1;col2;col3;10;
col1;col2;col3;1;
col1;col2;col3;100;
col1;col2;col3;0;
答案 0 :(得分:1)
您可以将此awk与多个分隔符一起用作字段分隔符:
awk -F '[;=-]' -v OFS=';' '{print $1, $2, $3, ($4 == "cleavage") ? $5 : 0, ""}' file
col1;col2;col3;10;
col1;col2;col3;1;
col1;col2;col3;100;
col1;col2;col3;0;
编辑:如果-
之前的字段中可以显示=
或$4
,那么您可以使用:
awk -F ';' -v OFS=';' '{split($4, a, /[=-]/);
print $1, $2, $3, (a[1] == "cleavage") ? a[2] : 0, ""}' file
col1;col2;col3;10;
col1;col2;col3;1;
col1;col2;col3;100;
col1;col2;col3;0;
答案 1 :(得分:1)
不清楚确切的格式,但这适用于您的示例,如果=和 - 在其他字段中,则可以使用。
GNU awk(第3场比赛)
awk '{match($0,/(.*);[^-0-9]*([0-9]*)[^;]*;$/,a);print a[1]";"+a[2]";"}' file
col1;col2;col3;10;
col1;col2;col3;1;
col1;col2;col3;100;
col1;col2;col3;0;
或sed
sed 's/;[^-0-9]*\([0-9]\{1,\}\)[^;]*;$/;\1;/;t;s/[^;]*;$/0;/' file
答案 2 :(得分:0)
我想出了这一个班轮:
awk -F';' -v OFS=";" '{sub(/cleavage=/,"",$(NF-1));
sub(/-.*/,"",$(NF-1));$(NF-1)+=0}7' file
它给出了
col1;col2;col3;10;
col1;col2;col3;1;
col1;col2;col3;100;
col1;col2;col3;0;