我的脚本的目的是将每个文本文件的第二列放在一个目录中,然后逐列将结果粘贴到一个文本文件中。
例如,如果我有三个格式为
的文本文件 age 30
gender m
weight 200
我希望输出为
age 30 40 50
gender m m f.
weight 200 194 143
这是我目前的代码:
!/bin/csh
set z = "e"
foreach y (*.txt)
if ($z == "e") then
echo "creating first columns for $y"
awk '{print $1}' $y > $SUBJECTS_DIR/vol_files/$y:r_rhvol.txt
else
echo "first columns have already been created for $y"
endif
echo "now adding the data for $y"
set v = (awk '{print $2}' $y)
paste $v >> $SUBJECTS_DIR/vol_files/$y:r_rhvol.txt
set z = "f"
end
谢谢!
答案 0 :(得分:2)
这是一个让我在玩耍的时候娱乐的人:
$ join foo <(join foo foo )
age 30 30 30
gender m m m
weight 200 200 200
这是awk中的一个:
$ awk '{a[$1]=a[$1] (a[$1]==""?"":OFS) $2}END{for(i in a)print i, a[i]}' foo foo foo
age 30 30 30
weight 200 200 200
gender m m m
说明:
$ awk '
{ a[$1]=a[$1] (a[$1]==""?"":OFS) $2 } # hash on the first field and append append
END { for(i in a) # after all files hashed
print i, a[i] } # print (in random order, though)
' foo foo foo
答案 1 :(得分:1)
针对具有已知结构的多个文件的 粘贴 + awk 管道的简短解决方案。
我们说我们有5个文件(可能更多):
paste $SUBJECTS_DIR/vol_files/*.txt | awk '{for(i=3;i<=NF;i+=2) $i=""}1'
示例性输出:
age 30 40 50 60 70
gender m m f. e g
weight 200 194 143 300 400
awk '{for(i=3;i<=NF;i+=2) $i=""}1'
- 从联接的行中删除重复的标题列age , gender ...