awk选择列的一部分(3个字符中的第3个)

时间:2018-08-26 23:53:38

标签: awk awk-formatting

我有很多文件,其中我选择了以下列

cat test.txt | awk ' {
if ($11 ~ /229/ && $5 ~ /1A1/) 
{print $0, ($3 + 1) }         
if ($11 ~ /229/ && $5 ~ /1A2/) 
{print $0, ($3 - 1) }
if ($11 ~ /49/ && $5 ~ /1A1/)  
{print $0, ($3 - 1)}
if ($11 ~ /49/ && $5 ~ /1A2/)
{print $0, ($3 + 1) }
}' > output

问题是某些文件的1A11A2可能具有不同的字母,例如1K11K2 ..... 我想使条件$5 ~(/1A2/) or $5 ~(/1A1/)更加“笼统”,并尝试了

$5 ~(/??1/)
$5 ~(/??2/)

到目前为止没有成功。有人可以帮我吗? 请注意,我还需要将选择条件保留在$ 11

cat test.txt | awk ' {
    if ($11 ~ /229/ && $5 ~ /??1/)
....

1 个答案:

答案 0 :(得分:0)

您应该尝试使用正则表达式,在这种情况下,您可以使用以下简单的awk程序:

awk ' {
if ($11 ~ /(229|49)/ && $5 ~ /1[A-Z][1-2]/) 
{print $0, ($3 + 1) }}' test.txt > output

我假设:

  • $5中的第二个字符是大写字母或马约斯字母([A-Z]),
  • $5中的第三个字符是12[1-2]
  • $11只能是22949