如何从多个文件中隔离字符串在UNIX中将它们放在一个文件名为头的输出文件中
我有一个包含多个扩展名为的文件的目录。失败 这些文件的格式如下: file1.失败:如何从多个文件中隔离字符串在UNIX中将它们放在一个文件名为头的输出文件中,unix,awk,sed,grep,Unix,Awk,Sed,Grep,我有一个包含多个扩展名为的文件的目录。失败 这些文件的格式如下: file1.失败: FHEAD|4525|20170109000000|20170125024831 THEAD|150001021|20170109121206|| TDETL|4000785067||1|EA|||RETURN|||N TTAIL|1 THEAD|150001022|20170109012801|| TDETL|4000804525||1|EA|||RETURN|||N TTAIL|1 FTAIL|6 150
FHEAD|4525|20170109000000|20170125024831
THEAD|150001021|20170109121206||
TDETL|4000785067||1|EA|||RETURN|||N
TTAIL|1
THEAD|150001022|20170109012801||
TDETL|4000804525||1|EA|||RETURN|||N
TTAIL|1
FTAIL|6
150001021
150001022
file1.failed
150001021
150001022
file2.failed
150001023
150001024
150001025
我需要将ad |和| 2之间的所有文本提取到输出文件中。
我正在尝试下面的方法,只有当我的目录中只有一个文件时,它才会起作用
sed -n 's:.*THEAD|\(.*\)|2.*:\1:p' <*.failed >transactions.log
现在,除了多个文件,我如何做相同的操作?
也可以在输出文件中添加文件名
预期输出:
FHEAD|4525|20170109000000|20170125024831
THEAD|150001021|20170109121206||
TDETL|4000785067||1|EA|||RETURN|||N
TTAIL|1
THEAD|150001022|20170109012801||
TDETL|4000804525||1|EA|||RETURN|||N
TTAIL|1
FTAIL|6
150001021
150001022
file1.failed
150001021
150001022
file2.failed
150001023
150001024
150001025
在awk中:
$ awk -F\| 'FNR==1{print FILENAME} $1=="THEAD"{print $2}' foo foo
foo
150001021
150001022
foo
150001021
150001022
在每个文件的第一条记录上,它打印出文件名,然后在以THEAD
开头的记录上打印第二个字段。用所有必需的文件替换foo
。这可能适合您(GNU-sed):
使用选项
-n
和-s
调用类似grep的性质,并分别处理每个文件地址。仅在文件的第一行显示当前文件名。替换并打印所需字符串之间的值。非常感谢这帮助我完成了关于对多个文件执行此操作的第一个步骤。但它仍然不会在输出中打印文件名。我只得到ID,没有文件名删除重定向操作符问题是我需要所有文件都以*结尾。失败的一天,它们可以是2个,另一天,它们可以是10个甚至50个不同的填充。我想我的规格不是最详细的。。。对不起。我所做的是:awk-F\|'FNR==1{print FILENAME}$1==THEAD{print$2}*。失败了
awk-F\|'FNR==1{print FILENAME}$1==THEAD{print$2}*。失败了
它没有像我希望的那样工作。awk*代码>使用三种不同的AWK,它们都可以使用。如果它对您不起作用,请尝试其他方法,例如围绕awk的shell循环:for i in*;不要重复$i;awk-F\|'$1==“THEAD”{print$2}'$i;完成