2011-03-29 33 views
2

我有200个文件:cool1.txt,cool2.txt,..., cool100.txt and warm1.txt, warm2.txt,...,warm100.txt.如何在循环中连接两个文件与indentifer?

所有文件都有2列数据。

我想串联200个文件如下有coolwarm1.txt ,coolwarm2.txt,coolwarm100.txt

cat cool1.txt warm1.txt > coolwarm1.txt 
cat cool2.txt warm2.txt > coolwarm2.txt 
... 
cat cool100.txt warm100.txt > coolwarm100.txt 

在coolwarm的每个文件* .TXT,我喜欢“酷”和“暖”串联后添加的标识符。

因此,例如,coolwarm1.txt应该是这样的

Input 
    cool1.txt 

    S44298 33307 
    S46800 32286 
    S55145 29361 

    warm1.txt 
    S10253 27473 
    S24395 33093 

Desired output for coolwarm1.txt 

S44298 33307 cool 
S46800 32286 cool 
S55145 29361 cool 
S10253 27473 warm 
S24395 33093 warm 

awk '{print FILENAME, $0}' cool1.txt warm1.txt > coolwarm1.txt会给 接近我想要的,但我不能进一步管理。

非常感谢您的帮助。

回答

4
for n in `seq 1 100`; do cat cool$n.txt | awk '{print $0 " cool"}' > coolwarm$n.txt; cat warm$n.txt | awk '{print $0 " warm"}' >> coolwarm$n.txt; done 
+0

+1更好的awk和完整性:P – user237419 2011-03-29 10:57:34

2
for i in 1 2 ; do cat cool${i}.txt | awk ' { print $1,$2,"cool" } ; ' ; cat warm${i}.txt | awk ' { print $1,$2,"warm" } ' ; done 
S44298 33307 cool 
S46800 32286 cool 
S55145 29361 cool 
S10253 27473 warm 
S24395 33093 warm 
S44298 33307 cool 
S46800 32286 cool 
S55145 29361 cool 
S10253 27473 warm 
S24395 33093 warm 
0
for i in {1..100} 
do 
    awk '{print $0,FILENAME}' "cool${i}.txt" "warm${i}.txt" > "coolwarm${i}.txt" 
done 

如果你只是想根据需要 例如substr(FILENAME,1,4)

或者你可以冒险和做在FILENAME“冷”和“暖”为标识,做一个substring一个awk脚本

#!/bin/bash 

awk 'BEGIN{ 
    for(i=1 ; i <=100 ; i++){ 
     coolname= "cool"i".txt" 
     warmname= "warm"i".txt" 
     output = "coolwarm"i".txt" 
     while((getline line < coolname) >0) { 
      print line" cool" >> output 
     } 
     close(coolname) 
     while ((getline line < warmname) > 0 ) { 
      print line" warm" >> output 
     } 
     close(warmname) 
    } 
}' 
1
for n in `seq 1..100` 
do 
sed 's/(.*)/\1 cool/' cool$n.txt >coolwarm$n.txt 
sed 's/(.*)/\1 warm/' warm$n.txt >>coolwarm$n.txt 
done 
+0

有趣。从来没有想过以这种方式使用sed。 – Tony 2011-03-29 13:03:34