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

UNIXデータファイルの各行の最初のn文字を取得する方法

これは実際には、外部プログラムを使用せずに Bash で実行できます (これを使用するスクリプトは #!/bin/bash で開始する必要があります) #!/bin/sh の代わりに 式 ${VARIABLE:offset:length} を使用して、POSIX シェルに準拠しません) (ここで :length オプションです):

#!/bin/bash

STR="123456789"

echo ${STR:0:1}
echo ${STR:0:5}
echo ${STR:0:10}
echo ${STR:5:10}
echo ${STR:8:10}

この出力が得られます:

1
12345
123456789
6789
9

開始オフセットは 0 から始まり、長さは少なくとも 1 でなければならないことに注意してください。括弧内の負のオフセットを使用して、文字列の右側からオフセットすることもできます:

echo ${STR:(-5):4}

5678

ファイルを読み取るには、最初の 8 文字を行ごとに繰り返しフェッチし、それらを端末に出力します。while を使用します。 次のようにループします:

while read LINE
    do echo "${STD:0:8}"
done < "/path/to/the/text_file"

Bash の文字列操作について知る必要があるすべての非常に役立つリソースは、https://tldp.org/LDP/abs/html/string-manipulation.html にあります。


cut で :

$ cut -c-22 file
0000000000011999980001
0000000000021999980001
0000000000031999980001
0000000000041999980001
0000000000051999980001
0000000000061999980001

2 番目の要件を理解している場合は、最初の 22 文字を長さ 10 と 12 の 2 つの列に分割してください。 sed がこれに最適です:

$ sed -r 's/(.{10})(.{12}).*/\1 \2/' file
0000000000 011999980001
0000000000 021999980001
0000000000 031999980001
0000000000 041999980001
0000000000 051999980001
0000000000 061999980001

sudo_O は素晴らしいカットと sed のソリューションを提供してくれました。私は awk ワンライナーを追加しました:

awk 'BEGIN{FIELDWIDTHS="22"} {print $1}' file

echo "000000000001199998000180000     DUMMY RAG"|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'
0000000000011999980001

空の文字を使用 (要件によって異なります。スペースをスキップするか、出力に含めてカウントします)

空白もカウントして出力に表示する必要がある場合:(上記のコマンドを変更する必要はありません)

echo "0 0 0 0 00000001199998000180000"|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'                                                                         
0 0 0 0 00000001199998

これらのスペースをスキップしたい場合:(クイック アンド ダーティ)

echo "0 0 0 0 00000001199998000180000"|sed 's/ //g'|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'                                                            
0000000000011999980001

Linux
  1. UNIX/Linux でファイルの行数を数える方法

  2. ファイルを分割し、各部分の最初の行を保持する方法は?

  3. Bash で、ファイルの各行の後に文字列を追加するにはどうすればよいですか?

  1. Linux シェルでは、複数行の文字列の各行をどのように処理できますか?

  2. unix - ファイル内の列数

  3. ファイルの各行の先頭に文字列を追加するにはどうすればよいですか?

  1. ファイル拡張子をクリーンアップする方法は?

  2. unix - 巨大な .gz ファイルを行ごとに分割する

  3. コマンドラインから Dropbox ファイルの URL を取得するには?