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

dov*_*vah 5 awk

我有一个这样的文件:

ID  A56
DS  /A56
DS  AGE 56
Run Code Online (Sandbox Code Playgroud)

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

预期输出:

ID  A56
DS  AGE 56
Run Code Online (Sandbox Code Playgroud)

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

awk '$2 /[A-Z]/' file
获取语​​法错误。

cuo*_*glm 10

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

$ awk '$2 ~ /^[[:upper:]]/' file
ID  A56
DS  AGE 56
Run Code Online (Sandbox Code Playgroud)


ter*_*don 5

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

  1. GNU grep

    grep -P '^[^\s]+\s+[A-Z]' file 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 珀尔

    perl -lane 'print if $F[1]=~/^[A-Z]/' file
    
    Run Code Online (Sandbox Code Playgroud)
  3. GNU sed

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

    while read -r a b; do 
        [[ $b =~ ^[A-Z] ]] && printf "%s %s\n" "$a" "$b"; 
    done < file 
    
    Run Code Online (Sandbox Code Playgroud)