我的输入文件是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
输出文件内容的显示:
你必须使用awk吗?要在 perl 中执行此操作,您可以从以下内容开始:
编辑:您的问题也是“文件的第一行”,但是您发布的数据似乎暗示文件包含多个测试,因此此代码将其考虑在内。