ファイルの最初の行の最初の4文字を取得して変数に入れる必要があります。

ファイルの最初の行の最初の4文字を取得して変数に入れる必要があります。

このようなファイルがあります。

サンプル1.txt

ABCDE10998909
10898990XYZ
1898772222YGH
8980000000000sihgj

出力:

ABCD

ファイルの最初の行の最初の4文字を取得して変数に入れる必要があります。

答え1

使用headcut:

$ variable=$( head -n 1 sample1.txt | cut -c 1-4 )
$ printf 'variable is %s\n' "$variable"
variable is ABCD

を使用して最初の行を抽出し、をhead使用して最初の4文字を切り取りますcut。一部の実装では、cut最初の4つを返すことがあります。バイト最初の4つの代わりに数値(例:GNU cut)。これは、データがマルチバイト文字を使用する場合に影響します。

使用sed:

$ variable=$( sed 's/^\(....\).*/\1/;q' sample1.txt )
$ printf 'variable is %s\n' "$variable"
variable is ABCD

sed最初の行の最初の4文字を使用して置き換え、修正されたsed行を出力して終了します。

最初の行に4文字未満が含まれている場合、両方のバリアントは4文字未満を生成します。

あなたの質問にタグが付けられました。。以前のシェルでは、より現代的で合理的なシェルを使用するのではなく、shバックティック()を使用してコマンドを置き換える必要があります。`...`$(...)

答え2

私が想定している過去のUNIXまたは最新のシェルがサポートされていないと仮定すると、bashPOSIX互換の方法でこれを行うことができます。

if IFS= read -r line 2> /dev/null < file; then 
    result="${line%"${line#????}"}"
    printf '%s\n' "$result" 
else
    printf >&2 '%s\n' 'Unable to read file contents or no newline found in the file'
fi

答え3

GNU grep(または互換性)ソリューション:

variable=$(grep -o -m1 '^....' file.txt)

どこ

  • -o出力のみ一致
  • -m11ゲーム後に停止
  • ^行の始まり
  • ....ランダムな文字、4回

メモ:

  • -o最初の行の最初の4文字のうち少なくとも4つを報告する非標準のGNU拡張(現在の他の実装によってサポートされています)。
  • つまり、最初の行に4文字があり、5行目の場合、その行の最初の4文字が報告されます。

答え4

ここで言及したので、最初の行の最初の4文字を変数に保存する必要があります。

command
variable=`awk 'NR==1{print substr($0,1,4)}' filename`

出力

variable=`awk 'NR==1{print substr($0,1,4)}' filename`
echo $variable
ABCD

関連情報