我有200个文件:cool1.txt,cool2.txt,..., cool100.txt and warm1.txt, warm2.txt,...,warm100.txt.
所有文件都有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的每个文件中,我喜欢在连接后添加标识符“cool”和“warm”。
例如,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
会给
接近我想要的,但我无法进一步管理。
非常感谢你的帮助。
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:0)
for i in {1..100}
do
awk '{print $0,FILENAME}' "cool${i}.txt" "warm${i}.txt" > "coolwarm${i}.txt"
done
如果您只想将“酷”和“暖”作为标识符,请根据需要在substring
上FILENAME
执行操作
例如substr(FILENAME,1,4)
或者您可以冒险并在一个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 )
}
}'