我有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
会给我想要的东西,但我无法进一步pipe理。
非常感谢您的帮助。
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
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
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
for i in {1..100} do awk '{print $0,FILENAME}' "cool${i}.txt" "warm${i}.txt" > "coolwarm${i}.txt" done
如果你只是想把“cool”和“warm”作为标识符,根据需要在FILENAME
上做一个substring
,比如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 ) } }'