Unixスクリプトを使用して、次のサンプルテキストファイルを含むヘッダーレコードに基づいて2つの別々のファイルに分割したいと思います。
CSI 447907 890947967201270
776666666 B
771555555 B
774444444 B
REL 447904 890947967201270
772222222 A
771111111 B+
770000000 A
CSI 447911 891096722201270
774444444 B+
778888888 A
779999999 A
REL 171077 889928722201270
774444444 B
773333333 B+
772222222 B+
771111111 C
PHY 114926 891987278201270
123456789 A
987654321 A
777777777 B+
結果ファイル:
テキストファイル1
CSI 447907 890947967201270
776666666 B
771555555 B
774444444 B
CSI 447911 891096722201270
774444444 B+
778888888 A
779999999 A
テキストファイル2
REL 447904 890947967201270
772222222 A
771111111 B+
770000000 A
REL 171077 889928722201270
774444444 B
773333333 B+
772222222 B+
771111111 C
PHY 114926 891987278201270
123456789 A
987654321 A
777777777 B+
ヘッダレコード数と詳細レコード数は異なる場合があります。列/フィールドは静的です。最初のテキストファイルにはCSIヘッダーと対応する詳細レコードが含まれ、2番目のテキストファイルは残りです。
ベストアンサー1
awkのもう一つの一般的なタスクは次のとおりです。
POSIXLY_CORRECT=1 LC_ALL=C awk '
$1 ~ /^[A-Z]{3}$/ {
if ($1 == "CSI")
file = "csi.txt"
else
file = "rest.txt"
}
file {print > file}'
POSIXLY_CORRECT
これは、GNU awkがawk
標準一致モードを除いて認識しない場合にのみ当てはまります。{...}
LC_ALL=C
からの[A-Z]
ASCII文字を表す必要があります。そうしないと、ローカライズ設定によっては、範囲に異なる文字が含まれる場合があります。A
Z
Solarisでは、command -p awk
またはを使用してください。そうしないと、使用しなくなる可能性が/usr/xpg4/bin/awk
あります。/bin/awk