在awk“if”语句中的最后一个下划线后获取字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在awk“if”语句中的最后一个下划线后获取字符相关的知识,希望对你有一定的参考价值。
我有csv,下面有样本数据。
column1,column2,column3
abc,123,sample_test_FT.txt
abc,123,sample_test_IFT.txt
我只需要打印第3列的最后一个下划线后面的字符等于“I”的行
期望的输出:
column1,column2,column3
abc,123,sample_test_IFT.txt
到目前为止,我已经提出了这个代码,但是不太合适。
awk -v FPAT='([^,]*)|("[^"]*")' -v var1=3 '{if (substr("${var1##*_}",1,1) == "I" ) print; else TRUE}'
答案
awk -v FPAT='([^,]*)|("[^"]*")' 'NR==1; NR>1 && match($3,"_I[^_]*$")'
正则表达式检查_I
的存在,并且$3
中没有更多的下划线。
另一答案
使用awk
的match()
功能:
awk -v FPAT='[^,]+|"[^"]+"' 'NR==1; NR > 1 && match($3, /^[^_]+_[^_]+_I/)' file
输出:
column1,column2,column3
abc,123,sample_test_IFT.txt
另一答案
以下awk
也可以在这里提供帮助:
awk -F, 'FNR==1{print;next} {split($3,array,"_");if(substr(array[3],1,1)=="I"){print;next}}' Input_file
现在也添加非单一衬里形式的解决方案。
awk -F, '
FNR==1{
print;
next
}
{
split($3,array,"_");
if(substr(array[3],1,1)=="I"){
print;
next}
}
' Input_file
以上是关于在awk“if”语句中的最后一个下划线后获取字符的主要内容,如果未能解决你的问题,请参考以下文章