我有 n 个具有相似数据的文件(称为 input1、input2 等),我希望创建一个包含这些文件的第二列的新文件(将其称为 out)。如果我使用
awk '{print $2}' input{1..n} >> out
然后我得到一列,其中包含输入文件第二列中的所有条目。我可以做什么来为不同的文件设置不同的列,例如input1 的$1
in out = 、 input2 的in out = 、 input3 的out = 、.....、 inputn 的out = ?$2
$2
$2
$3
$2
$n
$2
答案1
BEGIN
您可以使用以下语句在声明中完成整个操作getline
awk '
BEGIN {
while(1) {
line = sep = ""
for (i = 1; i < ARGC; i++) {
if ((getline < ARGV[i]) <= 0) exit
line = line sep $2
sep = OFS
}
print line
}
}' input{1..n} > out
答案2
您可以构建一个paste
命令将所有第二列放在一起:
cmd="paste"
for x in input{1..n}; do
cmd="$cmd <(awk '{print \$2;}' $x)"
done
echo $cmd
eval $cmd
答案3
我会使用该pr
工具,该工具旨在对数据进行列化:
awk '{print $2}' input{1..n} | pr -t --columns=n > out
这假设每个文件具有相同的行数。
答案4
使用这个邮政 作为参考
awk '{a[FNR] = a[FNR]" " $2}END{for(i=1;i<=FNR;i++) print a[i]}' input{1..n}
数组保存不同文件中的每一行
FNR 当前输入文件中读取的记录数,在每个文件的开头设置为零。
END{for(i=1;i<FNR;i++) print a[i]}
在文件末尾打印数组 a 的内容