殻を切る方法?

殻を切る方法?

たとえば、

これがファイル番号であると仮定します。

1.   hi
2.   hello
3.   hey

「hello」を取得するためにスペースを削除するにはどうすればよいですか?

$ head -1 num | (what should be here to make it below)
hi

答え1

awkジョブを含むパターンに似たパターンを使用して作成されたコード。ここで、「モード」は最初の行でのみ操作を実行することを意味し、「アクション」は「2番目の列を印刷してから終了」することです。

awk 'NR == 1 { print $2; exit }' file

この場合、これはexitオプションの最適化であり、削除できます(他の動作NR1なし)。NR「現在行のシーケンス番号」または「今まで読み取った行数」を示します。


この簡単な例では、headあなたの試みに基づいて構築されています。

head -n 1 file | while read -r num word; do printf '%s\n' "$word"; done

または、

read -r num word <file
printf '%s\n' "$word"

最初の行だけに興味があるので、同じことをします。

...しかしシェル自体からテキストを解析することはエラーが発生しやすいので避けるべきです。。このような小さな例ではうまくいきます。


あなたはこの言葉を使いました彫刻タイトルの英語の意味は次のとおりです。切る、別のUnixユーティリティです。ここでは使用できますが、少し簡単で、使用方法は2つのデータ列間の区切り文字によって異なります。

  1. 列の間にタブがある場合:

    head -n 1 file | cut -f 2
    
  2. 列の間にスペースが3つある場合:

    head -n 1 file | cut -d ' ' -f 4
    

答え2

最初の行が必要なのか、それとも特定の行(fooファイルか)が必要なのかによって異なります。

特定の行のみを分割するには、次を使用します。

$ awk 'NR==1 { print $2; exit}' foo
hi
$ awk 'NR==2 { print $2; exit}' foo
hello

コンテンツに基づいて行を選択するには、次のようにします。

$ awk '/1./ { print $2; exit }' foo
hi
$ awk '/2./ { print $2; exit }' foo
hello
$ awk '$1 ~ 2. { print $2; exit }' foo
hello
$ awk '/hello/ { print $2; exit }' foo
hello

すべての場合にこれexitを行うと、最初の一致のみが印刷されます(ファイル全体が処理されるのを防ぎます)。

関連情報