GNU/Linux >> Linux の 問題 >  >> Linux

指定された列が大文字で始まる場合に行を印刷しますか?

私はこのようなファイルを持っています:

ID  A56
DS  /A56
DS  AGE 56

また、2番目の列が大文字で始まる場合にのみ行全体を印刷したいと思います。

期待される出力:

ID  A56
DS  AGE 56

これまでに試したこと:
awk '$2 ~ /[A-Z]/ {print $0}' file
すべてを印刷します。大文字は2番目の列にあります。

awk '$2 /[A-Z]/' file
構文エラーを取得します。

承認された回答:

awkを使用できます @cuonglmが提案したように、または

  1. GNU grep

    grep -P '^[^s]+s+[A-Z]' file 
    
  2. Perl

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

    sed -rn '/^[^s]+s+[A-Z]/p' file 
    
  4. シェル(ksh93、zsh、またはbashの最新バージョンを想定)

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

Linux
  1. 2つのパターンの間(およびそれを含む)の線を印刷しますか?

  2. 「?」で始まる行を無視してファイルを出力する方法は?

  3. Linuxで特定のサイズのファイルを作成するには?

  1. Linuxは、指定された文字列のファイル名を再帰的に検索します

  2. 大文字の単語のみを出力する (Linux)

  3. 1 で始まる行を grep しますが、10、11、100 などではありません。

  1. パターンに一致する行を別のファイルの行に順番に置き換えますか?

  2. 重複、わずかな変更、テキストファイルの数行?

  3. 行番号によって、あるファイルの行を別のファイルの行に置き換えます