複数の履歴を含むファイルがあります。特定の場所(場所19および20など)にコード「06」があるレコードを別のファイルにコピーする必要があります。レコード間にスペースはありません。シェルスクリプトを使用してこれを達成するにはどうすればよいですか?
答え1
「位置19と20」が「06」と同じ行の文字19と20を参照している場合は、これを行う方法はいくつかあります。
使用grep
:
grep -E '^.{18}06' your_file > new_file
このコマンドは、行の先頭の後に18文字が続き、その後に2文字が続く行を探します06
。
バッシュ使用:
while IFS= read -r line; do
code="${line:18:2}"
[ "$code" == 06 ] && printf "%s\n" "$line"
done < your_file > new_file
上記と似ていますが、Perlでは次のようになります。
perl -ne 'print if substr($_,18,2) eq "06"' your_file > new_file
BashとPerlの両方では、文字列の最初の位置は位置0なので、このシナリオでは、文字19と20は位置18と19にあります(位置18から2文字を読み取る)。