私の入力ファイルはfile_1.txt、file_2.txt、file_3.txtなどです。このファイルには次のデータが含まれています
$ head file_*.txt
==> file_1.txt <==
----- Reset Loop 1 -------
Test #1
data
Test #2
data
Test #3
Test #4
data
==> file_2.txt <==
----- Reset Loop 2 -------
Test #1
Test #2
data
Test #3
Test #4
data
==> file_3.txt <==
----- Reset Loop 3 -------
Test #1
data
Test #2
data
Test #3
Test #4
現在私が持っているコードは、入力ファイルの各テストで利用可能なデータが次の場合にのみ、テスト後にファイル名とシーケンス番号を取得します。
#!/bin/bash
awk '
FNR==1 {
testId = ""
split(FILENAME,f,/[_.]/)
fileId = f[4]
}
testId != "" {
if (NF) {
print testId > "1_val.txt"
print fileId > "2_val.txt"
}
testId = ""
}
sub(/^Test #/,"") {
testId = $0
}
' file_*.txt
このコードから得られた結果は次のとおりです。
1_val.txt
1
2
4
2
4
1
2
2_val.txt
ਲਲਲਲਲਲਲਲਲਲਲ਼ਲ਼ਲ਼ਲ਼ਲ਼ਲ਼ਲ਼ਲ਼ਲ਼ਲ਼ਵਵਵਵਵਵਵਵਵਵ
出力ファイルに奇妙な文字があるため、オペレーティングシステムやその他の問題に問題がある可能性があります。別の方法を考えましたが、入力ファイルの最初の行にリストされているデータの番号を取得することでした。1_val.txt.
これに対する私のコードは次のとおりですが、awk 'NR==1' file_*.txt
スクリプトからこの特定のコマンドをどこに挿入するのかわかりません。
The expected output:
2_val.txt
1
1
1
2
2
3
3
編集:これは出力ファイルを生成するために実行した正確なコマンドです。
thulasyc > cat data_collect.sh
#!/usr/bin/env bash
awk '
FNR==1 {
testId = ""
fileId = $4
}
testId != "" {
if (NF) {
print testId > "1_val.txt"
print fileId > "2_val.txt"
}
testId = ""
}
sub(/^TX PTP Command #/,"") {
testId = $0
}
' "${@:--}"
thulasyc > ./data_collect.sh ptp_log_reset_*.txt
thulasyc > head *_val*
==> 1_val.txt <==
1
2
3
5
6
11
12
13
15
16
==> 2_val.txt <==
1
1
1
1
1
1
1
1
1
1
出力ファイルの内容を表示:
ベストアンサー1
$ cat tst.sh
#!/usr/bin/env bash
awk '
FNR==1 {
testId = ""
fileId = $4
}
testId != "" {
if (NF) {
print testId > "1_val.txt"
print fileId > "2_val.txt"
}
testId = ""
}
sub(/^Test #/,"") {
testId = $0
}
' "${@:--}"
$ ./tst.sh file_*.txt
$ head *_val*
==> 1_val.txt <==
1
2
4
2
4
1
2
==> 2_val.txt <==
1
1
1
2
2
3
3