如果给定列以大写字母开头,则打印行

如果给定列以大写字母开头,则打印行

我有一个这样的文件:

ID  A56
DS  /A56
DS  AGE 56

仅当第二列以大写字母开头时,我才想打印整行。

预期输出:

ID  A56
DS  AGE 56

到目前为止我已经尝试过:
awk '$2 ~ /[A-Z]/ {print $0}' file
打印所有内容:在第二列中找到大写字母。

awk '$2 /[A-Z]/' file
收到语法错误。

答案1

您必须使用正则表达式^来表示字符串的开头:

$ awk '$2 ~ /^[[:upper:]]/' file
ID  A56
DS  AGE 56

答案2

您可以按照@cuonglm的建议使用awk,或者

  1. GNU grep

    grep -P '^[^\s]+\s+[A-Z]' file 
    
  2. 珀尔

    perl -lane 'print if $F[1]=~/^[A-Z]/' file
    
  3. GNU sed

    sed -rn '/^[^\s]+\s+[A-Z]/p' file 
    
  4. shell(假设是最新版本的 ksh93、zsh 或 bash)

    while read -r a b; do 
        [[ $b =~ ^[A-Z] ]] && printf "%s %s\n" "$a" "$b"; 
    done < file 
    

相关内容