我有超过600个文件,我需要从每个文件中提取单个列并将它们写入输出文件中。我当前的代码执行此操作,它从所有文件中获取列并在输出文件中一个接一个地写入列。但是,我的输出文件中需要两件事:
我的示例代码:
for f in *; do cat "$f" | tr "\t" "~" | cut -d"~" -f2; done >out.txt
示例输入:
file01.txt
col1 col2 col3
1 2 3
4 5 6
7 8 9
10 11 12
file02.txt
col4 col5 col6
11 12 13
14 15 16
17 18 19
110 111 112
我目前的输出:
col2
2
5
8
11
col5
12
15
18
111
预期输出:
file01.txt file02.txt
2 12
5 15
8 18
11 111
答案 0 :(得分:1)
您可以像这样使用awk:
awk -v OFS='\t' 'BEGIN {
for (i=1; i<ARGC; i++)
printf ARGV[i] OFS;
print ARGV[i];
}
FNR==1 { next }
{
a[FNR]=(a[FNR]==""?"":a[FNR] OFS) $2
}
END {
for(i=2; i<=FNR; i++)
print a[i];
}' file*.txt
file01.txt file02.txt
2 12
5 15
8 18
11 111