awkまたはsedを使用して最初の列のスペースを印刷する方法

awkまたはsedを使用して最初の列のスペースを印刷する方法

以下はサンプル入力ファイルです。

ip.txt:

john    math
        science
paul    math
        science
rosy    math
jill    science
rob     math
        science
hary    math

希望の出力:

john

paul

rosy
jill
rob

hary

私が使用するとき:

awk '{print $1}' ip.txt

私の結果は次のとおりです

john
science
paul
science
rosy
jill
rob
science
hary

2番目の列の値を印刷したくないので、ファイルにスペースを印刷したいです。

この目標をどのように達成できますか?私はSolaris 5.10とksh

答え1

奇妙な:

awk '{print (NF>1) ? $1 : ""}' file

フィールド数が 1 より大きい場合は最初のフィールドを印刷し、それ以外の場合は空行を印刷します。

いくつかの追加の考え:

  • データがタブで区切られている場合

    awk -F '\t' '{print $1}' file
    
  • 最初の8文字を抽出するには

    awk '{print substr($0,1,8)}' file
    

答え2

POSIX sedの使用:

sed -e 's/^\([^[:blank:]]*\)[[:blank:]].*/\1/;t' -ed <file

答え3

タイトルフィールドの前に余分なスペースを追加するには、次のようにします。

grep -o "^[^ ]* \+" ip.txt

余分なスペースが欲しくない場合:

sed 's/ \+.*//' ip.txt

両方とも空の名前フィールドを持つ行を保持します。

関連情報