Lve*_*ver 2 awk text-processing
我想创建一个循环,其中文本文件中的特定列(在我的例子中为第 4 列)被添加为新文本文件的最后一列。我总共有大约 500 个文本文件 (V1-V500),我想从中获取第四列并将其添加到新的文本文件中(各列由制表符分隔)。所有文本文件都具有相同的行数。此外,添加的列的标题应包含其最初来源的文本文件的文件名。我已经尝试使用 awk 和 for 循环制定命令行,但我的命令都不起作用。我已经尝试过基于上一篇文章的命令行的命令行。我正在使用可用的 GNU 工具在 Linux 中工作。
举个例子:V1文本文件
header1 header2 header3 header4
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
Run Code Online (Sandbox Code Playgroud)
V2文本文件:
header1 header2 header3 header4
17 25 21 29
18 26 22 30
19 27 23 31
20 28 24 32
Run Code Online (Sandbox Code Playgroud)
新文本文件:
V1 V2
13 29
14 30
15 31
16 32
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
解析awk
所有文件。
awk -F'\t' -v OFS='\t' '{
x = (FNR==1 ? FILENAME : $4)
a[FNR] = (FNR==NR ? x : a[FNR] OFS x)
}
END {
for (i=1;i<=FNR;i++) print a[i]
}' V{1..500}
Run Code Online (Sandbox Code Playgroud)
x
是我们从每条生产线上保留下来的东西,a
也是我们建造的新生产线。两者均使用条件表达式进行赋值。FNR
是当前输入文件的行号,NR
总行数。FNR==NR
意思是“解析第一个文件时”。我还假设了制表符分隔的输入和输出。