Linux 如何在循环中用缩进符连接两个文件?
我有200个文件:Linux 如何在循环中用缩进符连接两个文件?,linux,bash,shell,unix,awk,Linux,Bash,Shell,Unix,Awk,我有200个文件:cool1.txt,cool2.txt,…,cool100.txt和warm1.txt,warm2.txt,…,warm100.txt。 所有文件都有两列数据 我想按如下方式连接200个文件,使之具有coolwarm1.txt、coolwarm2.txt、coolwarm100.txt cat cool1.txt warm1.txt > coolwarm1.txt cat cool2.txt warm2.txt > coolwarm2.txt ... cat coo
cool1.txt,cool2.txt,…,cool100.txt和warm1.txt,warm2.txt,…,warm100.txt。
所有文件都有两列数据
我想按如下方式连接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
将给出
接近我想要的,但我不能再继续了
非常感谢你的帮助
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
如果您只想将“cool”和“warm”作为标识符,请根据需要在FILENAME
上执行substring
例如substr(文件名,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 )
}
}'
#/bin/bash
开始{
对于(i=1;i 0){
打印行“酷”>>输出
}
关闭(coolname)
而((getline0){
打印行“warm”>>输出
}
关闭(温暖名称)
}
}'
很有趣。从未想过以这种方式使用sed。
for i in {1..100}
do
awk '{print $0,FILENAME}' "cool${i}.txt" "warm${i}.txt" > "coolwarm${i}.txt"
done
#!/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 )
}
}'
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