Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在循环中用缩进符连接两个文件?_Linux_Bash_Shell_Unix_Awk - Fatal编程技术网

Linux 如何在循环中用缩进符连接两个文件?

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

我有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 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