我的输入文件是file_1.txt
, file_2.txt
,file_3.txt
等等。这些文件包含数据,例如
$ head log_file_reset_*.txt
==> file_1.txt <==
Test #1
data
Test #2
data
Test #3
Test #4
data
==> file_2.txt <==
Test #1
Test #2
data
Test #3
Test #4
data
==> file_3.txt <==
Test #1
data
Test #2
data
Test #3
Test #4
Test
只有当Test
输入文件中每个可用的数据是:
#!/bin/bash
#################################################################################################
CWD=$(pwd)
for j in {1..5}
do
sed -n '
/^Test #/ {
s///
=
p
}
$=
' file_$j.txt \
| paste - - \
| awk -F '\t' '
NR > 1 && $1 - prevLine > ($2 ? 2 : 0) {print prev}
{prevLine = $1; prev = $2}
' >> 1_val.txt
我从此代码中获得的输出存储在1_val.txt
:
1_val.txt
1
2
4
2
4
1
2
我可以知道如何修改代码以获取列出的数据的文件名(只是数字)1_val.txt
并将其存储在另一个名为的文件中2_val.txt
吗?
预期输出:
2_val.txt
1
1
1
2
2
3
3
当你使用 awk 时,你永远不需要 sed。以下是您应该如何在每个 Unix 机器上使用任何 shell 中的任何 awk 来真正执行问题中的 shell 脚本所做的事情(我能说的最好):
然后将上面的内容打印到 1 个输出文件并将文件编号打印到另一个文件就是这个调整:
编辑以解决来自 OP 的以下评论:如果您不希望将上述 awk 脚本存储在单独的文件中,以下是如何在 shell 脚本中内联使用上述 awk 脚本:
然后您将shell脚本称为:
如果你有 GNU sed,可以这样完成:
分行: